JavaScript
中的数据类型有:
string
number
null
undefined
boolean
object
symbol
ts
// symbol类型是固定且唯一的
let symbol1:symbol = Symbol()
let symbol2:symbol = Symbol()
console.log(symbol1)
// symbol类型是唯一的
console.log(symbol1 === symbol2)
// 但symbol类型是可以重新赋值的
symbol1 = symbol2
// 我们尝试使用下readonly 发现readonly只允许在array或者tuple中使用
// let symbol3:readonly symbol = Symbol()
// symbol3 = symbol2
// 因此如果要声明一个symbol变量,且这变量是彻底固定的,不能重新赋值。那么就需要使用unique symbol
ts
// unique symbol类型相对symbol类型 有如下区别:
// 1.unique symbol类型只能使用const声明,不能使用let声明
// 2.unique symbol类型不能重新赋值
// A variable whose type is a 'unique symbol' type must be 'const'
// let symbol1:unique symbol = Symbol()
const symbol1:unique symbol = Symbol()
const symbol2:unique symbol = Symbol()
// This comparison appears to be unintentional because the types 'typeof symbol1' and 'typeof symbol2' have no overlap.
// console.log(symbol1 === symbol2)
// Cannot assign to 'symbol1' because it is a constant.
symbol1 = symbol2