主题
字面量和类型拓宽
字面量
- 有 3 种字面量类型:字符串字面量类型、数字字面量类型、布尔字面量类型
typescript
const specifiedStr: 'this is string' = 'this is string';
const specifiedNum: 1 = 1;
const specifiedBoolean: true = true;
- 字符串字面量有两种:普通、模板
typescript
type prefix = `#${string}`
const a: prefix = 'aaa' // error
const b: prefix = '#aaa' // ok
- 可以用于限制类型为某几个特定的字面量类型
typescript
type Direction = 'up' | 'down'
类型拓宽
- let 定义变量会被推断成字面量的父类型,const 则会被推断成字面量类型(只针对于三种字面量类型)
typescript
let s1 = 'a' // 类型:string
const s2 = 'a' // 类型:'a'
- 对于对象类型,const 不生效,但可以使用断言
as const
,使其类型拓宽
typescript
// name 类型为 string
interface Props {
name: 'musi'
}
// name 类型为 'musi'
interface Props {
name: 'musi' as const
}
typescript
// 断言多个
interface Props {
name: 'musi',
id: 1
} as const
// 元祖断言
['musi' as const]