TS - 如何恢复旧的--noImplicitAny行为

时间:2017-07-28 12:53:15

标签: typescript configuration

有人可以告诉我如何实现这种情况,例如

这样的代码
let x;

会抛出一个异常并且不会发出它吗?我真的更喜欢2.1之前的TS版本的行为。也许TSlint可以解决我的问题?

1 个答案:

答案 0 :(得分:0)

不同之处在于,当您分配给x时,它会推断实际类型,而不仅仅是使用any。在将号码分配给x之前,它可能会显示为any,但实际上尝试使用它时,您会发现它以undefined类型开头。

它不显示在您的单行示例中,但在您分配给x之前,您只能将其用作undefined,并且在分配给它之后,类型会相应地加宽或更改。

考虑以下代码:

function foo(z: boolean) {
  let x;
  if (x) {   // Editor sees the type here as `undefined`
    x.foo(); // Error here, the type of `x` is now `never`
  }

  x = 3;     // `x` now has type `number`
  if (z) {
    x = 'foo'; // `x` now has type `string`
  }
  let y = x;   // Both `x` and `y` now have type `string|number`
  console.log(y.toFixed()); // Error, `toFixed` does not exist on `string|number`
}

将定义更改为let x:any;,此代码无需投诉即可编译,因为此处x的类型确实为any

function foo(z: boolean) {
  let x: any;

  x = 3;
  if (z) {
    x = 'foo';
  }
  let y = x;
  console.log(y.toFixed()); 
}

y的类型明确any,因为它是从x的类型推断出来的。

所以回到你的一个班轮:

let x;

这不是隐式any,因为推断类型为undefined

要回答这个问题,请不要关闭类型推理。