我正在使用 Webpack 和 @babel/typescript
来编译一个混合的 TypeScript 和 JavaScript 项目。
我正在使用 --noImplicitAny
来鼓励利用打字。
我没有使用 --allowJs
,因为我的项目太大了,它会阻塞 TypeScript 编译器,并且会破坏 Visual Studio 高亮显示/Intellisense。
对于未类型化的 npm 模块,如果我没有时间添加类型,我会创建一个定义文件以将其类型显式设置为 any
。例如
example.ts
import * as elemDataset from 'elem-dataset';
elem-dataset.ts
declare module 'elem-dataset';
这让编译器满意。但是对于内部模块我还没有转换成 TS...
import * as example from './example2'; // Where example2 is example2.ts
我收到这个错误:
Could not find a type declaration file for module './example2'. C:/blah/blah/blah/example2.js implicitly has 'any' type.
我试过添加一个类型声明,比如 this answer .
example2.d.ts
declare var example2: any;
declare module "example2" {
export = example2;
}
但是我得到了这个错误:
File C:/blah/blah/blah/example2.d.ts is not a module.
我也试过 declare module '*';
per this answer ,但我得到了与上面相同的错误。
如何将内部 JS 文件的导入类型显式设置为 any?
最佳答案
事实证明这足以满足我的需求:
// @ts-ignore
import * as x from './example2';
一开始我没有尝试,因为我认为注释会禁用整个文件的类型检查。
但是在导入之前使用 @ts-ignore
允许我对项目的其余部分强制执行类型检查,同时忽略单个 JavaScript 文件,直到我有时间转换它。
关于typescript - 如何使用 noImplicityAny 和不使用 allowJs 在 TS 中导入 JS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55795060/