首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将CSS模块的类型声明写入ES模块

如何将CSS模块的类型声明写入ES模块
EN

Stack Overflow用户
提问于 2021-05-02 08:39:08
回答 2查看 1.8K关注 0票数 5

我正在将盖茨比从v2升级到v3,在这个更新中是模块作为ES模块导入。

网络在前进,我们也是如此。ES模块允许我们更好地进行树抖动并生成更小的文件。从现在开始,您需要将CSS模块导入为:import { box } from './mystyles.module.css'

旧的方法将不再编译。

更改导入后,它将正确编译,并且看起来与预期的一样。唯一的问题是,当无法找到导出时,我会得到类型错误。

我的假设是,类型声明是错误的,但是我不知道如何在不将每个可能的CSS类命名为导出的情况下动态地键入这个类型。

我也尝试过import * as styles,它首先是不鼓励的(因为它可以防止树抖动),但也会导致类型错误。

Foo.module.css:

代码语言:javascript
复制
.foo { color: red; }
.bar { color: blue; } 

Foo.tsx:

代码语言:javascript
复制
import { foo, bar } from "./Foo.module.css"
// Module "*.module.css" has no exported member 'foo'
// Module "*.module.css" has no exported member 'bar'

css.d.ts:

代码语言:javascript
复制
declare module "*.module.css" {
    const styles: { [className: string]: string }
    export * from styles
}
EN

回答 2

Stack Overflow用户

发布于 2021-06-21 06:43:29

我也遇到了同样的问题,以下几点似乎对我有用:

代码语言:javascript
复制
declare module "*.module.css" {
    const styles: { [className: string]: string }
    export = styles
}

然而,这可能是对TypeScript的滥用,因为根据TypeScript文档export =语法应该是针对CommonJS和CommonJS模块的,在这些模块系统中它代表了exports

票数 2
EN

Stack Overflow用户

发布于 2021-05-11 11:47:18

我认为唯一的方法是:

代码语言:javascript
复制
import styles from "./Foo.module.css";

除非您能够从d.ts中的css文件导出各个样式

代码语言:javascript
复制
declare module '*.css' {
  const styles: {
    [className: string]: string;
    foo: string;
    bar: string;
  };
  export default styles; 
}

顺便说一下,类型声明中的语法是不正确的,如果在导出语句中使用from,那么它需要一个字符串(path或npm包名)。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67354417

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档