类型推断的可靠性如何?

问题描述 投票:1回答:1

我刚开始接typescript,遇到了type inference

现在,根据指导老师的介绍,用type初始化变量不是最佳实践,而是依靠type inference进行初始化,但立即出现如下所示的错误

function add(n1: number, n2: number, showResult: boolean, phrase: string) {
  const result = n1 + n2;
  if (showResult) {
    console.log(phrase + result);
  }
  return result;
}

let number1;
number1 = '5';
const number2 = 2.8;

add(number1, number2, printResult, resultPhrase);

从上面的代码片段中,它显然使string跳过了类型检查,因此,如果我们不依赖type inference而是显式设置类型,这会是一个更好的主意吗?如下面

let number1: number;
number1 = '5';

立即我们从上述代码中得到错误。下图是不信任type inference的证明。

enter image description here

javascript typescript type-inference
1个回答
3
投票

number1的类型为any,因为声明时未分配任何内容。不幸的是,any可分配给任何东西-这就是为什么强烈建议不要使用它。带有

function add(n1: number,

如果调用add,并且传递的第一个参数的类型为any,它将进行编译。

为变量之后]分配另一个值>声明了变量不会更改类型-Typescript仍将其键入为any

为了避免犯此类错误,请确保在tsconfig中启用noImplicitAny-当您尝试使用需要更特定类型的noImplicitAny时,它将抛出错误。

其他有用的方法是使用any而不是const-对于let,将始终自动推断类型。您可能偶尔需要注释比推断的类型更具体的类型,但是至少推断的类型将始终是特定的,而不是const。 (any应优先于const而已)

如果您do

必须使用let-这有时是必要的-然后在初始化时为其分配一个值(并且类型推断将起作用),或使用类似类型的注释
let

以便正确键入,否则将为let number1: number; 并会引起问题。

当变量最初没有分配任何东西时使用类型注释非常好。

© www.soinside.com 2019 - 2024. All rights reserved.