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'
分类:
TypeScript
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!