对象文字中的动态键访问导致扩大的打字稿签名
Posted
技术标签:
【中文标题】对象文字中的动态键访问导致扩大的打字稿签名【英文标题】:Dynamic key access in object literal results in widened typescript signature 【发布时间】:2020-02-14 06:20:53 【问题描述】:对于以下代码:
const x =
a: 'c',
b: 'd'
;
const y =
[x.a]: 'e',
生成的类型有:
typeof x ->
a: string,
b: string
typeof y ->
[x: string]: string
预期类型:
typeof y ->
c: string
SO 上的类似 issue 有一个与此处无关的解决方案
在 Github 上找到报告的 issue,它说这是已修复但不知何故无法正常工作
【问题讨论】:
【参考方案1】:那是因为typeof x.a
实际上是一个字符串。这里,x 是常量,但x.a
的值可以更改为任何字符串值。
如果x.a
的值不会改变,那么可能的解决方案(使用const assertion 在打字稿版本3.4 中添加):
const x =
a: 'c',
b: 'd'
as const;
const y =
[x.a]: 'e',
typeof y ->
c: string
【讨论】:
谢谢!但要注意,这将适用于 3.4 及更高版本。对于较旧的,我们将不得不执行以下操作: const x = a: 'c' as 'c', b: 'd' as 'd' 。您能否更新答案以反映版本信息? 谢谢,我会做的。 @HarshVyas 您的编辑引入了一个错字:您的意思是 v 3.4 而不是 4.3!以上是关于对象文字中的动态键访问导致扩大的打字稿签名的主要内容,如果未能解决你的问题,请参考以下文章