将设置" noImplicitAny"在typescript to false中禁用类型检查?

时间:2018-02-14 15:06:34

标签: typescript

Typescript在javascript es6之上添加了许多功能,我对静态类型私有/公共/受保护关键字感兴趣。

到目前为止,Typescript编译器所施加的最大限制是无法使用没有类型定义文件(.d.ts)的javascript库。

我们能够通过将"noImplicitAny"选项设置为false来编译没有类型定义的库(cheerio),但我担心这会允许隐式任意在我们项目的代码中。 由于DefinitlyTyped项目,

cheerio以及许多其他javascript库已经有了类型定义,但我无法预测何时需要没有可用类型定义的javascript库。

如果需要,我们必须将"noImplicitAny"设置为false这是否会有效地禁用部分或全部编译时类型检查?

3 个答案:

答案 0 :(得分:2)

您可能希望使用--skipLibCheck,而不是使用noImplicitAny,因为它更适合您的情况。

答案 1 :(得分:2)

为没有类型定义的库(example)编写类型定义很容易:

// somelib.d.ts
declare module "somelib" {
  const lib: any;
  export = lib;
}

现在您可以导入模块并使用它而不需要类型检查错误,而不会丢失类型检查:

import * as somelib from "somelib";
somelib.doSomething();

你甚至可以写一个catch-all wildcard for all libraries(我没有亲自试过):

declare module "*";

答案 2 :(得分:1)

如果指定类型,则此选项不会影响Typescript对已定义类型的符号的检查。

设置此选项将导致编译器假设您没有明确指定类型的any

function log(someArg) { // someArgs will be assumed to be any
  sendDataToServer(someArg);
}

var x; // x is any;

由于any可以分配给任何其他类型,因此可能会遇到一类错误。例如,如果您没有指定变量的类型,则无论预期类型如何,都可以在任何地方使用该变量:

var x; // x is any implicitly ;
x = 10
function foo(a: string) {
    a.split(',');
}

foo(x); // Ok, any can be assigned to string    
var bar: Date = x; // Ok any can also be Date

noImplicitAny

中的更多信息