如何根据常量数组内容推导其精确类型,无需重复定义?
实现方式
方式1:使用 as const 断言(TS 3.4+ 推荐)
这是最简单的实现方案,只需在数组末尾加上as const常量断言,TS就会自动将其推导为精确的只读字面量元组类型:
const array = ['a', 'b', 'c'] as const; // 推导类型为:readonly ["a", "b", "c"]
这种方式得到的元组是只读的,无法修改元素值、也无法执行push/pop等变更数组的操作,适合定义不变的常量集合。
如果需要去掉只读标记,可以通过类型映射移除readonly修饰符:
type Mutable<T> = { -readonly [P in keyof T]: T[P] }; type ArrayType = Mutable<typeof array>; // 得到类型:["a", "b", "c"]
方式2:使用泛型辅助函数(需要可变元组时使用)
如果你需要直接得到可修改的普通元组类型,可以先定义一个通用的泛型元组构造函数:
const createTuple = <T extends (string | number | boolean)[]>(...args: T) => args; // 使用时直接传入元素即可 const array = createTuple('a', 'b', 'c'); // 推导类型为:["a", "b", "c"]
这种方式得到的元组和普通数组一样支持修改操作,适合需要后续变更数组内容的场景。
内容的提问来源于stack exchange,提问作者nitrovatter
相关产品推荐
相关产品推荐

