TypeScript 取数组对象中所有元素的某个属性值作为类型
给定下面数组对象,从该对象中提取出 TName
和 TAge
两个类型
const students = [
{ name: 'Tom', age: 10 },
{ name: 'Jim', age: 12 },
{ name: 'Jack', age: 11 },
]
// 需要得到的类型:
type TName = 'Tom' | 'Jim' | 'Jack'
type TAge = 10 | 12 | 11
方法一
const students = [
{ name: 'Tom', age: 10 },
{ name: 'Jim', age: 12 },
{ name: 'Jack', age: 11 },
] as const // 注意这里使用了 `as const`
type TName = typeof students[number]['name']
type TAge = typeof students[number]['age']
方法二(泛型)
const students = [
{ name: 'Tom', age: 10 },
{ name: 'Jim', age: 12 },
{ name: 'Jack', age: 11 },
] as const // 注意这里使用了 `as const`
type Student<T, K extends string> = T extends Readonly<{ [key in K]: infer U }[]> ? U : never
type TName = Student<typeof students, 'name'>
type TAge = Student<typeof students, 'age'>