blog icon indicating copy to clipboard operation
blog copied to clipboard

解决 css in js 中遇到的找不到 css 类型的问题

Open kaindy7633 opened this issue 3 years ago • 0 comments

解决 css in js 中遇到的找不到 css 类型的问题

当我们使用 create-react-app 创建项目时,脚手架默认使用 css 的方式是直接导入 css 文件,像这样:

import "./App.css";

当我们需要使用 css in js 的时候,会报错:

根据提示,我们需要使用 *.d.ts 的文件来声明其文件类型,文件名任意,我们在根目录下创建 typing.d.ts 文件,并写入声明

declare module "*.css" {
  const css: { [key: string]: string };
  export default css;
}

现在,报错不存在了,我们就可以像访问对象一样访问 css 属性

我们既然使用了 css in js 的方式,当然也要将 css(或其他 css 前置处理器,如:lessscss)命名为类似 *.module.css

接着替换原来的样式类声明方式,如下:

现在有个问题是,当我们使用对象形式访问 css 样式时,并没有任何提示,我们来解决这个问题

我们需要安装一个开发时依赖:typescript-plugin-css-modules,它可以解析 css 样式对象,并提供相应的提示

先安装它

yarn add typescript-plugin-css-modules -D

接着需要在 tsconfig.js 中配置它

如果编辑器使用的 vscode,当然,大多数都使用的这个编辑器,我们还需要对编辑器做一些配置

在项目的根目录下创建 .vscode 的文件夹,然后在此文件夹下创建文件 settings.json,并在文件中输入以下内容:

{
  "typescript.tsdk": "node_modules/typescript/lib",
  "typescript.enablePromptUseWorkspaceTsdk": true,
}

此时,你的编辑器可能会有一些提示,请点击 Allow 或中文的允许所有

OK,所有配置进行完毕,现在我们在代码中引入 css module 对象时,就会提示当前 module 对象中所有的 css 属性

另外,使用了 css in js 的方式,在编写 css 时候请使用小驼峰的命令规则,如:appHeader``、appLogoSpin

kaindy7633 avatar May 09 '21 06:05 kaindy7633