Skip to content
泠泠彻夜的笔记
Main Navigation首页笔记
HTML
CSS
JavaScript
TypeScript
Node.js
Vue3
uniapp
插件
算法题

外观

Sidebar Navigation

TypeScript学习笔记

TypeScript简介

TypeScript类型

TypeScript数组

TypeScript的symbol类型

TypeScript函数类型

TypeScript的对象类型

TypeScript的interface接口

TypeScript的class类型

TypeScript泛型

此页内容
Table of Contents for current page
  • 1. 简介
  • 2. unique symbol
  • 3. 类型推断

TypeScript的symbol类型

怡然

577字约2分钟

2024-10-30

1. 简介

  • Symbol 是 ES2015 新引入的一种原始类型的值。它类似于字符串,但是每一个 Symbol 值都是独一无二的,与其他任何值都不相等。
let x: symbol = Symbol();
let y: symbol = Symbol();

x === y; // false

2. unique symbol

  • symbol类型包含所有的 Symbol 值,但是无法表示某一个具体的 Symbol 值。
  • Symbol 值不存在字面量,必须通过变量来引用,所以写不出只包含单个 Symbol 值的那种值类型。
  • TypeScript 设计了symbol的一个子类型unique symbol,它表示单个的、某个具体的 Symbol 值。
  • 因为unique symbol表示单个值,所以这个类型的变量是不能修改值的,只能用const命令声明,不能用let声明。
// 正确
const x: unique symbol = Symbol();

// 报错
let y: unique symbol = Symbol();
  • const命令为变量赋值 Symbol 值时,变量类型默认就是unique symbol,所以类型可以省略不写。
const x: unique symbol = Symbol();
// 等同于
const x = Symbol();
  • unique symbol 类型是 symbol 类型的子类型,所以可以将前者赋值给后者,但是反过来就不行。
  • unique symbol 类型的一个作用,就是用作属性名,这可以保证不会跟其他属性名冲突。如果要把某一个特定的 Symbol 值当作属性名,那么它的类型只能是 unique symbol,不能是 symbol。
const x: unique symbol = Symbol();
const y: symbol = Symbol();

interface Foo {
  [x]: string; // 正确
  [y]: string; // 报错
}
  • unique symbol类型也可以用作类(class)的属性值,但只能赋值给类的readonly static属性。
class C {
  static readonly foo: unique symbol = Symbol();
}

3. 类型推断

  • 如果变量声明时没有给出类型,TypeScript 会推断某个 Symbol 值变量的类型。
  • let命令声明的变量,推断类型为 symbol。
  • const声明的变量,推断类型为unique symbol。
// 类型为 symbol
let x = Symbol();

// 类型为 unique symbol
const x = Symbol();
  • const声明的变量,如果被赋值为另一个symbol类型的变量,则推断类型为symbol。
let x = Symbol();

// 类型为 symbol
const y = x;
  • let声明的变量,如果被赋值为另一个unique symbol类型的变量,则推断类型还是symbol。
const x = Symbol();

// 类型为 symbol
let y = x;
贡献者: tsxwslk
上一页TypeScript数组
下一页TypeScript函数类型

Power by VuePress & vuepress-theme-plume