as const
as const
当 as const 修饰符用在变量声明或表达式的类型上时,它会强制 TypeScript 将变量或表达式的类型视为不可变的(immutable)
对象属性是只读的
const bar = { x: 1, y: 2 } as const
bar.x = 3 // 无法为“x”赋值,因为它是只读属性
const bar = { x: 1, y: 2 } as const
// 等价于
const bar: {
readonly x: 1
readonly y: 2
} = { x: 1, y: 2 }
数组变成只读元祖
const foo = ['a', 'b'] as const
foo.push('c') // 类型“readonly ["a", "b"]”上不存在属性“push”
const foo = ['a', 'b'] as const
// 等价于
const foo: readonly ['a', 'b'] = ['a', 'b']
他的优势是可以固定数组每个元素的类型
扩展 -> 获取元祖中所有的 key:
type list = readonly ['a', 'b']
type keys = list[number] // "a" | "b"
扩展 -> 元祖的联合类型能用来解构:
对于元祖组成的联合类型,... 也有分配律的效果(当我们解构元组的联合时,也会出现如同分布式条件类型那样的 distributive 效果)
type A = [1, 2] | [3, 4]
type B = ['a', 'b'] | ['c', 'd']
type C = [true, ...A, ...B]
// [true, 1, 2, "a", "b"] | [true, 1, 2, "c", "d"] | [true, 3, 4, "a", "b"] | [true, 3, 4, "c", "d"]
变量值应被视为文本类型
文字类型允许我们定义更具体的类型,而不是像字符串或数字这样泛化的类型。例如:
type Switch = 'On' | 'Off'
const 断言允许我们将变量值标记为文字类型:
let s = 'On' as const // s 被锁定为 'On' 且无法修改
但是我感觉和直接用 const 效果没啥区别:
const s = 'On'
浙公网安备 33010602011771号