为了账号安全,请及时绑定邮箱和手机立即绑定

类型推断有多可靠?

类型推断有多可靠?

蝴蝶不菲 2022-06-16 16:52:57
我刚开始捡起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。
查看完整描述

1 回答

?
侃侃尔雅

TA贡献1801条经验 获得超16个赞

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出现问题。

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


查看完整回答
反对 回复 2022-06-16
  • 1 回答
  • 0 关注
  • 172 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号