我的学生类型与年级有关(一个学生可以有很多年级):
export interface Student {
id: number,
name: string
surname: string
age: number
email: string
Grades: List<Grade>
}
我只想选择List<any>
类型的对象的键,为此我写了一个类型:
export type Filter<T, Condition> = {
// Set all types that match the Condition to the value of the field (i.e. name: "name")
// Else set the type to never
[K in keyof T]: T[K] extends Condition ? K : never
}[keyof T] // Selects all the types of all the keys except for never
Filter<Student, List<any>>
的类型为:"Grades"
。
下一步是从"Grades"
到类型Grade
。
我尝试了以下方法:
Student["Grades"]
,但结果为List<Grade>
类型。
有没有办法只获取内部类型?
答案 0 :(得分:3)
您可以使用infer
来获取通用类型的通用参数,如下所示:
Array.from(document.querySelectorAll('#content span')).slice(-1)[0]
您可以像这样使用它:
type ListType<T> = T extends List<infer U> ? U : never;
或者使用您的let grade: ListType<Student["Grades"]> // inferred type Grade
,如下所示:
Filter