TS2304错误:编译器无法识别.d.ts声明的ambient类型IField怎么解决
问题原因
1. tsconfig.json配置错误
你写的paths字段放到了compilerOptions外层,属于无效配置,TS编译器不会识别该规则。同时你没有配置include字段,默认情况下TS正式编译只会扫描目标目录下的.ts后缀文件,根目录的types.d.ts没有被纳入编译范围。
编辑器的IntelliSense会自动扫描整个工作区的类型定义文件,所以可以正常识别IField类型,但正式编译(包括ts-node调用的编译流程)只会读取tsconfig指定范围内的文件,因此会报找不到类型的错误。
2. ts-node默认加载逻辑限制
nodemon调用ts-node运行时,部分版本的ts-node不会主动加载根目录下的非模块式全局类型定义,需要额外配置触发加载。
解决方法
第一步:修正tsconfig.json配置
把paths移到compilerOptions内部,同时添加include字段明确指定要纳入编译的类型文件:
{ "compilerOptions": { "target": "es6", "module": "commonjs", "esModuleInterop": true, "forceConsistentCasingInFileNames": true, "strict": true, "paths": { "*": ["./*.d.ts"] } }, "include": [ "src/**/*", "./*.d.ts" ], "exclude": [ "node_modules" ] }
第二步:添加typeRoots配置(可选,解决仍不生效的情况)
如果修正上述配置后还是报错,可以在compilerOptions中添加typeRoots字段,明确指定类型定义的扫描目录:
"compilerOptions": { // 其他原有配置保持不变 "typeRoots": ["./", "./node_modules/@types"] }
第三步:给ts-node添加files标识(可选)
如果运行时仍然报错,修改package.json的启动命令,让ts-node强制加载tsconfig中include指定的所有文件:
"scripts": { "start": "nodemon --exec ts-node --files src/index.ts" }
内容的提问来源于stack exchange,提问作者fred jean-germain
相关产品推荐
相关产品推荐

