【发布时间】:2020-04-29 02:48:37
【问题描述】:
在 TypeScript 中使用带有可变键的对象时,我注意到了意外的类型。
给定以下代码
type MyType = {
[x: number] : number
}
const o : MyType = {
0: 1,
}
const a = o[0]; // Return type correctly identified as number
const b = o[1]; // Return type should be undefined and compiler should not allow this
我注意到,当使用变量键的[x: number] 语法定义对象类型时,无法正确检测使用[...] 的对象访问类型。
VSCode 告诉我a 和b 都具有number 类型。类型不应该是number | undefined,因为它可能会发生未定义键的情况?将a 和b 记录到控制台时,a 是number,而b 是undefined。
当MyType 类型的对象被传递给一个函数并且该函数访问该对象中的一个键然后执行以下操作时,问题变得更加严重:
function fun(o: MyType) : number {
return o[10000] ?? null // can be number or null at runtime
}
没有显示错误。但是当代码运行时,o[10000] 是未定义的,因此返回值是null,它不是一个有效的数字。想象一下使用这个返回值来执行进一步的计算,这些计算都是基于一个有效数字的假设。这会导致编译器应该检测到的运行时错误(如果我不理解完全错误的东西,我是 TS 新手)
(这些示例中使用的 TypeScript 是由 create-react-app 配置的,我没有更改任何设置)
【问题讨论】:
标签: javascript typescript types