打字稿noImplicitAny和noImplicitReturns没有按预期工作

时间:2017-01-25 16:14:49

标签: typescript visual-studio-code tsconfig

我添加了" noImplicitAny"和" noImplicitReturns"到我的Typescript tsconfig.json文件:

{
    "compilerOptions": {
        "target":"es5",
        "noImplicitAny": true,
        "noImplicitThis": true,
        "noImplicitReturns": true,
        "noUnusedLocals":true,
        "out": "dist/js/main.js"
    }
}

我预计以下代码会产生错误,或者至少会出现警告:

private randomMove() {  // no return type but no warning :(
    let o = 3;          // no type for o but no warning :(
}

" noUnusedLocals"正在工作。

它是如何工作的,我错过了什么吗? 当您没有指定类型/返回类型时,是否可以让Visual Studio代码生成警告?

1 个答案:

答案 0 :(得分:5)

你误解了那些旗帜的含义。

<强> noImplicitAny

  

使用隐含的任何类型提高表达式和声明的错误。

在您的示例中并非如此,因为编译器推断o的类型为number,如果您执行此操作,则应该收到错误:

let o;

<强> noImplicitReturns

  

当函数中的所有代码路径都没有返回值时报告错误。

您的功能可能根本不需要返回,但这样做:

function fn(a: number): boolean {
    if (a > 0) {
        return false;
    }
}

应该导致编译错误。

不,如果函数不包含返回类型,则无法(我知道)会导致编译器出错。
那是因为:

  1. 编译器可以在大多数时间推断返回类型
  2. 如果您的功能没有返回怎么办?对于很多人来说,需要使用: void
  3. 来注释每个函数会过于冗长