【发布时间】:2020-03-25 20:19:50
【问题描述】:
我正在尝试使用 symbol 定义一个对象作为键类型,因为 MDN 说:
符号值可以用作对象属性的标识符 [...]
但使用它作为键属性的类型:
type obj = {
[key: symbol | string]: string
}
导致以下错误:
TS1023:索引签名参数类型必须是“字符串”或“数字”。
即使它可以用作索引类型。
我正在使用最新的打字稿版本(v3.7.2),我发现的相关问题:
-
Typescript: destructuring an object with symbols as keys(他正在使用 Symbol 的实际实例,我想要 type
symbol) - TypeScript: An index signature parameter must be a 'string' or 'number' when trying to use string | number
- ES6: destructuring an object with symbols as keys(这不可能是一个解决方案 - 使用实际实例作为类型似乎有点错误,因为每个 Symbol 实例都是唯一的......)
我还查看了typescript symbol docs,但它们只显示了它如何用作值,而不是类型。
例子:
const obj = {} as {
[key: number | symbol]: string // Won't work
};
const sym = Symbol('My symbol');
obj[sym] = 'Hi';
【问题讨论】:
-
我认为 TypeScript 只支持其对象类型声明中的特定符号。你真的想要any
symbol吗?也许展示一个你想如何使用type obj的例子 - 我怀疑所有符号键属性都是strings。 -
@Bergi 我添加了一个示例,也许我已经监督了一些事情,但我找不到让 ts 接受符号的方法(不使用
any这是不好的做法)。 -
不确定是否正确,但您是否尝试使用
Map<Symbol,String>,因为我们有 Map ,如果这可以达到您想要达到的目的 -
对我来说同样的问题,我想烦人的部分是“TS 是 JS 的超集”的虚假广告——嗯,不完全是。这是一个完美的例子。
标签: javascript typescript types symbols