TypeScript 假定任何键都保证存在于记录中

2024-05-23

这是一些代码:

declare const foo: Record<string, number>

const x = foo['some-key']

打字稿说x有类型number.

It should be number | undefined,因为不能保证some-key存在于物体上。

WhyTypeScript 是否给出了这种虚假的保证,即使strict: true?


您可以使用以下命令启用此行为noUncheckedIndexedAccess属性(“使用索引访问时将未定义添加到类型。”),请参阅这个游乐场 https://www.typescriptlang.org/play?noUncheckedIndexedAccess=true#code/CYUwxgNghgTiAEYD2A7AzgF3gMyUgXPAErhIzAA8mMAligOYA08KArgLYBGIMAfAFD9k6LAA94AXhx4A2gHI0SdiAC0AaxABPOQF1B-IA.

As to why那不是strict行为,我只能做出猜测:它模仿默认配置中数组的行为。本质上,数组(至少在访问其元素方面)可以理解为Record<int, T>。在通常情况下,您知道存在哪些元素并且可以访问哪些元素,并且 TypeScript 相信您会正确执行此操作(也许这样做是愚蠢的)。

事实上我从来没有觉得奇怪Record<string, number>不会返回number | undefined关于索引访问,因为这就是我所说的。string in, number出去。我可以看到你从哪里来!

更明确的答案可能需要决策者之一或活跃的 TypeScript 维护者来确定。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

TypeScript 假定任何键都保证存在于记录中 的相关文章

随机推荐