TypeScript版本: 3.8.0-dev.20191205
搜索词:
- const assertion unique symbol
- "unique symbol" "as const"
代码
const prop = Symbol()
const dictionary = {
prop: Symbol()
}
const sealedDictionary = {
prop: Symbol()
} as const
class MyClass {
// Works because "prop" is a unique symbol
[prop]: 1
// Does not work because "dictionary.prop" is not a unique symbol
[dictionary.prop]: 2
// Does not work because "sealedDictionary.prop" is not a unique symbol,
// even though it probably should be?
[sealedDictionary.prop]: 3
}
预期行为:
MyClass
应该接受 sealedDictionary.prop
作为计算属性名,因为它应该被视为一个唯一符号。
实际行为:
TypeScript使用TS1166报错:
类属性声明中的计算属性名必须引用类型为字面类型或'unique symbol'类型的表达式。
**Playground链接:**提供更新(旧链接在新playground中似乎已损坏)
相关问题: —
5条答案
按热度按时间efzxgjgh1#
符号在分配给对象时似乎失去了“独特性”。
这种行为的另一个例子:Playground。
apeeds0o2#
@RyanCavanaugh 你将这个问题标记为“等待更多反馈”。你能详细说明一下这是什么意思吗?你是在寻找社区反馈还是维护者反馈?
我之前也遇到过这个问题,一度认为是TypeScript符号索引支持的问题,直到有人指出这里。如果能解决这个问题就太好了。
1u4esq0p3#
当前的行为是有意为之还是疏忽?创建具有唯一符号的对象需要这样做,这令人沮丧:
如果可以直接声明符号,那就更好了:
oipij1gg4#
有任何更新吗?
我也遇到了相同的奇怪行为。另外,就我的情况而言,我不想让类型有
readonly
,所以我在寻找另一种创建对象的方法。tv6aics15#
现在编写这样的代码非常不方便。我必须这样做:
但是关于这个问题的确有一些需要考虑的事情,比如
[[Getter]]
:是否有可能不处理与
[[Getter]]
对应的属性,而是处理expression
的属性?处理指的是通过
as const
将相应的symbol
转换为unique symbol
。