如何使用noImplicityAny且不使用allowJs在TS中导入JS

2023-11-22

我正在使用 Webpack 和@babel/typescript编译混合 TypeScript 和 JavaScript 项目。

我在用着--noImplicitAny鼓励利用打字。

我没有使用--allowJs因为我的项目太大了,它会阻塞 TypeScript 编译器,并且破坏 Visual Studio 突出显示/智能感知。

对于未类型化的 npm 模块,如果我没有时间添加类型,我会创建一个定义文件来显式将其类型设置为any。例如

示例.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”类型。

我尝试添加类型声明,例如这个答案.

example2.d.ts

declare var example2: any;

declare module "example2" {
    export = example2;
}

但后来我得到这个错误:

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

我也尝试过declare module '*'; per 这个答案,但我得到了与上面相同的错误。

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


事实证明这足以满足我的需求:

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

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

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使用noImplicityAny且不使用allowJs在TS中导入JS 的相关文章

随机推荐