如何使用/声明一个外部模块,它不会在 Angular 11 中传递 strict 和 noImplicitReturns TypeScript 设置?

How to use / declare an external module, which won't pass strict and noImplicitReturns TypeScript settings in Angular 11?

我们有一个 Angular 11 应用程序打开了 strict mode。它在 tsconfig.json 中的 compilerOptions 配置中具有这些值:

"strict": true,
"noImplicitReturns": true,

现在我们要使用外部库 (leaflet geoman)。库是这样导入的:

import * as L from 'leaflet';
import '@geoman-io/leaflet-geoman-free';

不幸的是,它包括隐式 any 类型以及隐式 any return 类型:

Parameter 'options' implicitly has an 'any' type.
'setLang', which lacks return-type annotation, implicitly has an 'any' return type

如何告诉编译器在编译期间忽略模块中的这些错误,但为项目的其余部分保持 strict 模式打开?

即使@types 包含在 leaflet 和 leaflet-geoman-free npm 包中,您也应该能够使用“as”关键字来告诉 TypeScript 某个元素符合特定接口/class.

const x = fn() as IYourInterface;

如果你知道return数据的结构,你可以自己定义一个接口。如果需要,您可以通过在触发错误的行之前添加此注释来忽略打字稿触发的错误:

// @ts-ignore
line of code that triggers the error

显然,如果你确定包中缺少某些类型定义,最好的方法是自己创建一个接口。

您可以调用 编译器 并使用 --skipLibCheck 标志来实现您想要的。

--skipLibCheckTypeScript 2.0中添加:skiplibcheck

tsc --skipLibCheck

您可以阅读更多关于为什么在此线程中使用它的信息: