仅对定义文件允许隐式任何

Posted

技术标签:

【中文标题】仅对定义文件允许隐式任何【英文标题】:Allow implicit any only for definition files 【发布时间】:2016-12-04 01:27:58 【问题描述】:

我正在使用 TypeScript,并在我的 tsconfig.json 中设置了 "noImplicitAny": true 选项。

我正在使用typings 来管理类型定义文件,并在我的应用程序的入口点中使用引用路径指令来包含它们:

/// <reference path="./typings/index.d.ts" />

问题是一些定义文件依赖于隐式any,所以现在我从.d.ts文件中得到很多编译错误。

有没有办法禁用/消除这些错误,例如基于路径或文件类型?

【问题讨论】:

您是否尝试将带有"noImplicitAny": false 的第二个tsconfig.json 文件放入typings/ 目录? 另一种可能的解决方案是将您的 tsconfig.json 文件放在包含源代码的目录中,例如src/,而不是放在项目根目录下。 @Terite 感谢您的建议。我尝试将第二个tsconfig.json 文件添加到typings 目录,但仍然出现错误。我不想重组我的项目,但我不确定这是否可行,因为.d.ts 文件仍会包含在内。 【参考方案1】:

随着 TypeScript 2.0 的发布,引入了 skipLibCheck 编译器选项,它应该可以解决您的问题:

TypeScript 2.0 添加了一个新的 --skipLibCheck 编译器选项,该选项会导致声明文件(扩展名为 .d.ts 的文件)的类型检查被跳过。当程序包含大型声明文件时,编译器会花费大量时间对已知不包含错误的声明进行类型检查,而跳过声明文件类型检查可能会显着缩短编译时间。

由于一个文件中的声明会影响其他文件中的类型检查,因此在指定--skipLibCheck 时可能无法检测到某些错误。例如,如果非声明文件增加了声明文件中声明的类型,则可能会导致仅在检查声明文件时才报告的错误。然而,在实践中,这种情况很少见。

默认为false,可以在tsconfig.json中启用:


    "compilerOptions": 
        "skipLibCheck": true,
        ...
    ,
    ...

【讨论】:

【参考方案2】:

如果您需要在单个导入行上允许隐式任何,您可以在无类型模块导入之前使用//@ts-ignore 属性 它将忽略隐含的任何(以及下一行的所有其他可能错误,因此由您决定是否正确) 但这很容易,很快就解决了我很多头痛

例如对于字体 awesome 5 我已经

//@ts-ignore
import fontawesome from '@fortawesome/fontawesome';
//@ts-ignore
import regular from '@fortawesome/fontawesome-free-regular';

fontawesome.library.add(regular);

另外,它适用于 webpack

【讨论】:

以上是关于仅对定义文件允许隐式任何的主要内容,如果未能解决你的问题,请参考以下文章

仅对lambda表达式的隐式类型推断?为什么?困惑!

创建一个自定义属性,提示 Resharper 隐式使用该属性

仅对 navigationItem backBarButton Item 使用自定义图像

C#编程(四十一)----------用户定义的数据类型转换

Scala 进阶—— implicit 用法:隐式参数

Django Admin:仅对一个模型字段使用自定义小部件