我刚开始捡起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出现问题。
当变量最初没有分配任何东西时使用类型注释是非常好的。
添加回答
举报
0/150
提交
取消
