Skip to content

JavaScript 中的数据类型有:

  1. string
  2. number
  3. null
  4. undefined
  5. boolean
  6. object
  7. 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