该系列文章是本人阅读阮一峰老师的《TypeScript教程》学习笔记,欢迎各位大佬指出不正确的地方,感谢!
简介
unique symbol
symbol类型包含所有的Symbol值,但无法表示一个具体的Symbol值,为了解决这个问题,所以设计了symbol的一个子类型unique symbol,它表示单个的、某个具体的Symbol值。
unique symbol类型的值因为是不能修改的,所以只能用const声明,不能用let声明。
const命令为变量赋值Symbol值时,变量类型默认是unique symbol,所以类型可以省略不写。
每个声明为unique symbol类型的变量,它们的值是不一样的,属于两个值类型。
如果变量b想要写成跟变量a是同一个unique symbol值类型,只能写成类型为typeof a。
相同参数的Symbol.for()方法会返回相同的Symbol值,TS目前无法识别这种情况,所以可能出现多个unique symbol类型的变量,等于同一个Symbol值的情况。
unique symbol类型的一个作用,就是用作属性名,这可以保证不会跟其他属性名冲突。如果要把某一个特定的Symbol值当作属性名,那么它的类型只能是unique symbol,不能是symbol。
unique symbol类型也可以用作class的属性值,但只能赋值给类的readonly static属性。
类型推断
只有const声明且赋值为Symbol()的变量推断为unique symbol,其他的都推断为symbol。