如何在没有noImplicityAny和没有allowJs的情况下在TS中导入JS

时间:2019-04-22 13:20:41

标签: typescript webpack babel

我正在使用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

我收到此错误:

  

找不到模块'./example2'的类型声明文件。 C:/blah/blah/blah/example2.js隐式具有“ any”类型。

我尝试添加类型声明,例如在this answer中。

example2.d.ts

declare var example2: any;

declare module "example2" {
    export = example2;
}

但随后出现此错误:

  

文件C:/blah/blah/blah/example2.d.ts不是一个模块。

我还尝试了this answerdeclare module '*';,但出现了与上述相同的错误。

如何将内部JS文件的导入类型显式设置为任何类型?

1 个答案:

答案 0 :(得分:3)

结果证明这足以满足我的需求

// @ts-ignore
import * as x from './example2';

起初我没有尝试过,因为我认为注释会禁用整个文件的类型检查。

但是在导入之前使用@ts-ignore可以使我对项目的其余部分执行类型检查,而忽略单个JavaScript文件,直到我有时间对其进行转换为止。