我是 TypeScript 新手。我遇到过这种情况:
function testArgs(arg: string) {
console.log(typeof arg);
}
const arr = ['apple', 'banana', 'grapes'];
arr.forEach((rec, i) => {
testArgs(i);
});
输出为:
number
number
number
我知道这是因为 ts 代码被转换为 js,因此 console.log
打印 number
因为 js 中没有类型。但是,当方法参数接受字符串参数时, typescript 不应该将传递给 testArgs
方法的参数隐式转换为字符串吗?
最佳答案
请务必记住,Typescript 永远不会根据类型信息实际更改数据类型。这种理解来自类型的基本性质:它们的作用是帮助您避免犯错误,它们在代码中不发挥积极作用。
话虽这么说,Typescript 可以按照您的意愿宽松或严格。它越严格,对作为编码员的你来说就越“有帮助”(相反,如果你有懒惰的习惯,它就会更烦人:P)
我建议在 tsconfig.json 中设置一些选项,这会捕获您的错误,并且您能够轻松地看到问题:
"strict": true,
"noImplicitReturns": true,
"noImplicitAny": true,
"noImplicitThis": true,
结果是 TypeScript 会抛出一个编译错误,提醒您注意该问题(问题是您传递的是索引,而不是项目):
error TS2345: Argument of type 'number' is not assignable to parameter of type 'string'.
顺便说一句,尽量避免使用旧的 foreach 语法 - 它非常昂贵(为每个项目调用一个函数)并且可能导致困惑的代码流。
试试这个:
for (const item of arr) {
testArgs(item);
}
关于javascript - TypeScript 中方法参数的隐式类型转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56741546/