TypeScript | 字面量类型

373 阅读1分钟

在计算机科学中,字面量(literal)是用于表达源代码中一个固定值的表示法(notation)。

字符串字面量类型

字符串字面量类型允许你指定字符串必须的固定值。

字符串类型,其实是一个集合类型,所有的字符串集合在一起构成了 string 类型。

而字符串字面量类型很直接,你定义为 'imooc',那这个变量的类型就是 'imooc' 类型。

// 变量 protagonist 被声明为 'Sherlock' 字面量类型,就只能赋值为 'Sherlock'
let protagonist: 'Sherlock'

protagonist = 'Sherlock'
protagonist = 'Watson' // Error, Type '"Watson"' is not assignable to type '"Sherlock"'

字符串字面量类型还可以用于区分函数重载:

function createElement(tagName: 'img'): HTMLImageElement
function createElement(tagName: 'input'): HTMLInputElement

function createElement(tagName: string): Element {}

布尔字面量类型

声明布尔字面量类型,注意这里是 : 不是 =。 = 等号是变量赋值,: 表示声明的类型。

let success: true
let fail: false
let value: true | false

接口的返回值,会有正确返回和异常两种情况,这两种情况要有不同的数据返回格式:

type Result = { success: true, code: number, object: object } | { success: false, code: number, errMsg: string }

let res: Result = { success: false, code: 90001, errMsg: '该二维码已使用' }

if (!res.success) {
  res.errMsg // OK
  res.object // Error, Property 'object' does not exist on type '{ success: false; code: number; errMsg: string; }
}

数字字面量类型

TypeScript 还具有数字字面量类型。

比如骰子只有六种点数:

let die: 1 | 2 | 3 | 4 | 5 | 6

die = 9 // Error