TypeScript - 什么是“唯一”关键字?

时间:2018-03-23 14:15:53

标签: typescript

我只是在TypeScript游戏中编写了一些代码,发现unique似乎是一个保留字,但我找不到任何文档。

enter image description here

这个关键字是否有任何文档?

2 个答案:

答案 0 :(得分:7)

从TypeScript 2.7开始,有unique symbol类型,用于允许将符号用作唯一文字。相关文档为here,@ TitianCernicovaDragomir链接了引入此功能的相关pull request

至于为什么它在Playground中是蓝色的,我猜它的颜色不是最好的,只是突出显示任何特殊的单词,即使它没有在特殊的上下文中使用。 (我无法找到关于它的相关GitHub issue;也许有人应该提交一个?)。它绝对是一个有效的标识符,并且发出的JavaScript是正确的。 VSCode似乎没有这个问题:

比较Playground weird colorizing

weird Playground colors

到VSCode预期的着色:

VSCode colors

好吧,好吧。希望有所帮助;祝你好运!

答案 1 :(得分:3)

这可以与符号一起使用。来自release notes

  

要将符号视为唯一文字,可以使用新类型unique symbolunique symbolsymbol的子类型,仅通过调用Symbol()Symbol.for()或显式类型注释生成。新类型仅允许在const声明和readonly static属性上,并且为了引用特定的唯一符号,您必须使用typeof运算符。每个对unique symbol的引用都意味着一个与给定声明相关的完全唯一的身份。

// Works
declare const Foo: unique symbol;

// Error! 'Bar' isn't a constant.
let Bar: unique symbol = Symbol();

// Works - refers to a unique symbol, but its identity is tied to 'Foo'.
let Baz: typeof Foo = Foo;

// Also works.
class C {
    static readonly StaticSymbol: unique symbol = Symbol();
}