simplify the life

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'

posted on   lessfish  阅读(129)  评论(0编辑  收藏  举报

相关博文:
阅读排行:
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!

导航

统计信息

点击右上角即可分享
微信分享提示