1、react-app-env.d.ts的作用
在使用create-react-app xxx --typescript
生成一个react typescript
项目时,在src目录下会生成一个react-app-env.d.ts
类型声明文件
/// <reference types="react-scripts" />
三斜线指令是包含单个XML
标签的单行注释。 注释的内容会做为编译器指令使用。
三斜线指令仅可放在包含它的文件的最顶端。 一个三斜线指令的前面只能出现单行或多行注释,这包括其它的三斜线指令。 如果它们出现在一个语句或声明之后,那么它们会被当做普通的单行注释,并且不具有特殊的涵义。
三斜线引用告诉编译器在编译过程中要引入的额外的文件。
三斜线指令中有两种types
和 path
两种不同的属性,它们的区别是:types
用于声明对另一个库的依赖,而 path
用于声明对另一个文件的依赖。上面react-app-env.d.ts
依赖react-scripts库的类型声明文件,react-scripts
下的package.json
中types
指定了TypeScript
的入口文件
当项目编译时将会根据tsconfig.json
中include
指定的目录去找代码所需要的类型声明文件,而react-app-env.d.ts
会告诉编译器含有哪些类型声明,里面含有一些常用的类型声明,比如react、react-dom
的一些API
类型声明,图片、样式模块类型声明等等。
有了上面的类型声明,我们就可以在项目中直接引入图片或者样式
import contentBg from "@assets/image/content-bg.png"
import styles from './index.module.scss';
假如引入的包没有相应的类型声明呢?
比如使用gridmanager-react
制作表格,但是目前gridmanager-react
还没有提供类型声明,怎么办呢?其实可以在react-app-env.d.ts
或者在src
目录下另外定义一个.d.ts
文件中加上该模块的类型声明
/// <reference types="react-scripts" />
declare module 'gridmanager-react' {
const classes: any;
export default classes;
}
这样,再导入gridmanager-react
就不会报如下错误:
2、react-app-env.d.ts如何生成的
把react-app-env.d.ts
文件删掉,然后执行yarn start
启动项目会报类型错误吗?
答案是不会,在执行构建之前会重新生成react-app-env.d.ts
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。