15

1、react-app-env.d.ts的作用

在使用create-react-app xxx --typescript生成一个react typescript项目时,在src目录下会生成一个react-app-env.d.ts类型声明文件

/// <reference types="react-scripts" />

三斜线指令是包含单个XML标签的单行注释。 注释的内容会做为编译器指令使用

三斜线指令仅可放在包含它的文件的最顶端。 一个三斜线指令的前面只能出现单行或多行注释,这包括其它的三斜线指令。 如果它们出现在一个语句或声明之后,那么它们会被当做普通的单行注释,并且不具有特殊的涵义。

三斜线引用告诉编译器在编译过程中要引入的额外的文件。

三斜线指令中有两种typespath 两种不同的属性,它们的区别是:types 用于声明对另一个库的依赖,而 path 用于声明对另一个文件的依赖。上面react-app-env.d.ts依赖react-scripts库的类型声明文件,react-scripts下的package.jsontypes指定了TypeScript 的入口文件
image.png

当项目编译时将会根据tsconfig.jsoninclude指定的目录去找代码所需要的类型声明文件,而react-app-env.d.ts会告诉编译器含有哪些类型声明,里面含有一些常用的类型声明,比如react、react-dom的一些API类型声明,图片、样式模块类型声明等等。
image.png

有了上面的类型声明,我们就可以在项目中直接引入图片或者样式

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就不会报如下错误:
image.png

2、react-app-env.d.ts如何生成的

react-app-env.d.ts文件删掉,然后执行yarn start启动项目会报类型错误吗?

答案是不会,在执行构建之前会重新生成react-app-env.d.ts
image.png
image.png


记得要微笑
1.9k 声望4.5k 粉丝

知不足而奋进,望远山而前行,卯足劲,不减热爱。