3

我们有一个打开严格模式的 Angular 11 应用程序。compilerOptions它在以下配置中具有以下值tsconfig.json

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

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

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

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

参数 'options' 隐含地具有 'any' 类型。
'setLang' 缺少返回类型注释,隐含地具有“任何”返回类型

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

4

2 回答 2

6

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

--skipLibCheckTypeScript 2.0中添加: skiplibcheck

tsc --skipLibCheck

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

TypeScript 编译器参数“skipLibCheck”的使用

于 2021-03-29T10:16:28.327 回答
1

即使@types 包含在leaflet 和leaflet-geoman-free npm 包中,您也应该能够使用“as”关键字告诉TypeScript 元素尊重某个接口/类。

const x = fn() as IYourInterface;

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

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

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

于 2021-03-29T10:05:08.530 回答