如何编写TypeScript工具类型将接口键转为数组类型?
将TypeScript接口的键转换为固定元组类型
要把Student接口的键转换为指定的字面量元组类型,可以通过keyof操作符结合自定义工具类型实现:
实现代码
interface Student { name: string; id: number; gender: string; } // 自定义工具类型:将联合类型转换为元组 type UnionToTuple<T> = (T extends any ? (x: T) => void : never) extends (x: infer U) => void ? [...UnionToTuple<Exclude<T, U>>, U] : []; // 生成目标元组类型 type Arr = UnionToTuple<keyof Student>; // 类型为 ['name', 'id', 'gender']
说明
keyof Student会获取接口所有键的联合类型:"name" | "id" | "gender"UnionToTuple工具类型通过条件推断和递归,将联合类型拆解为按接口声明顺序排列的元组(TypeScript 4.1+版本会保留接口键的声明顺序)
如果你只需要包含所有键的数组类型(而非固定长度的元组),可以直接简化为:
type Arr = (keyof Student)[]; // 类型为 ("name" | "id" | "gender")[]
内容的提问来源于stack exchange,提问作者skyScraperno_1
相关产品推荐
相关产品推荐

