如何从嵌套对象中选择类型?

时间:2019-05-14 12:36:23

标签: typescript types

我的学生类型与年级有关(一个学生可以有很多年级):

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>类型。

有没有办法只获取内部类型?

1 个答案:

答案 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