猿问

类型推断有多可靠?

我刚开始捡起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。

蝴蝶不菲
浏览 173回答 1
1回答

侃侃尔雅

number1类型为any,因为在声明它时没有分配任何内容。不幸的是,它可以分配给任何东西——这any就是为什么强烈建议不要使用它。和function add(n1: number,如果您调用add传递的第一个参数是 type any,它将编译。在声明变量后为变量分配另一个值不会更改类型 - Typescript 仍将其类型视为any.为了避免犯这些错误,请确保noImplicitAny在您的 tsconfig 中启用 - 当您尝试使用any预期更具体的类型时,它会抛出错误。其他有用的方法是使用const而不是let- with const,类型将始终被自动推断。您可能偶尔需要注释比推断的类型更具体的类型,但至少推断的类型将始终是特定的,而不是any. (无论如何const都应该优先于let任何时候)如果您确实必须使用let- 这有时是必要的 - 然后在初始化时为其分配一个值(并且类型推断将起作用),或者使用类型注释,如let number1: number;以便正确输入,否则会any出现问题。当变量最初没有分配任何东西时使用类型注释是非常好的。
随时随地看视频慕课网APP

相关分类

JavaScript
我要回答