由于MDN表示,我试图将符号定义为键类型的对象:
符号值可以用作对象属性的标识符[...]
但是使用它作为键属性的类型:
type obj = {
[key: symbol | string]: string
}
导致以下错误:
TS1023:索引签名参数类型必须为“字符串”或“数字”。
即使它可以用作索引类型。我正在使用最新的打字稿版本(v3.7.2
),发现了相关的问题:
- 打字稿:使用符号作为键来破坏对象(他使用的是Symbol的实际实例,我想要类型
symbol
) - TypeScript:尝试使用字符串|时,索引签名参数必须为“字符串”或“数字” 数
- ES6:使用符号作为键来销毁对象(这不是解决方案-因为每个Symbol实例都是唯一的,所以使用实际实例作为类型似乎有点错误。)
我也看过打字稿符号文档,但它们仅显示了它如何用作值,而不是类型。
例:
const obj = {} as {
[key: number | symbol]: string // Won't work
};
const sym = Symbol('My symbol');
obj[sym] = 'Hi';
@Bergi我添加了一个示例,也许我已经监督了一些事情,但是我找不到让ts接受符号的方法(不使用
—
西蒙
any
它是一种不好的做法)。
不确定是否正确,但是您是否尝试使用
—
pavan kumar
Map<Symbol,String>
我们拥有的Map,是否可以达到您想要实现的目的
对我来说,同样的问题,我想令人讨厌的部分是关于“ TS是JS的超集”的虚假广告-嗯,不完全是。这是一个完美的例子。
—
Patrick
symbol
?也许显示一个示例您想如何使用您的type obj
-我怀疑所有符号键属性都将是string
s。