A)正如你说的,有一个最简单的(不是最好的)选择使用要求:
const css = require('./component.css')
B)有更好的解决方案使用标准进口:
import * as css from './component.css'
- 使全类名的IntelliSense
- 需要为每个CSS文件类型定义,否则
tsc
编译将失败
对于正确的智能感知,的WebPack需要为每一个CSS文件类型定义:
使用的WebPack typings-for-css-modules-loader
webpackConfig.module.loaders: [
{ test: /\.css$/, loader: 'typings-for-css-modules?modules' }
{ test: /\.scss$/, loader: 'typings-for-css-modules?modules&sass' }
];
装载机将产生在你的代码库*.css.d.ts
文件中的每css文件
- Typescript编译器将会理解,css导入将是模块,其中包含字符串类型的属性(类名称)。
提到typings-for-css-loader
包含a bug因为类型的文件生成的延迟,最好在还没有产生我们*.css.d.ts
文件的情况下宣布全球*.css
类型。
这little bug场景:
- 创建CSS文件
component.css
- 包括在组件
import * as css from './component.css'
- 运行
webpack
- 打字稿编译器将尝试编译代码(ERROR)
- 装载机将产生Css模块类型文件(
component.css.d.ts
),但是打印机编译器为了找到新的t ypings文件
- 运行
webpack
将再次修复生成错误。
简单的解决方法是导入CSS模块创建全局定义(如文件在源根称为typings.d.ts
):
declare module '*.css' {
interface IClassNames {
[className: string]: string
}
const classNames: IClassNames;
export = classNames;
}
如果没有生成CSS文件,该定义将被使用(例如,你已经添加了新的css文件)。否则将使用生成的特定(需要位于同一文件夹中,并且与源文件相同的名称+ .d.ts
扩展名),例如。 component.css.d.ts
定义和智能感知将完美工作。
的component.css.d.ts
例子:
export const wrapper: string;
export const button: string;
export const link: string;
如果你不希望看到生成的css分型,您可以在IDE设置过滤器隐藏在你的源代码与扩展.css.d.ts的所有文件。
要么'import * as ...'样式或'import styles = require(...'是有效的,您可能必须为您的css文件声明模块 - 无论是显式还是泛型所有的css文件 - 作为typescript编译器将不知道它。[见这里](https://github.com/css-modules/css-modules/issues/61)自动定义生成器。 –
可能的重复[在使用Webpack构建的Typescript中使用React组件中的CSS模块](http://stackoverflow.com/questions/35014132/use-css-modules-in-react-components-with-typescript-built-by-webpack) – mixel