如何从类型中提取不可为空的属性名称?

时间:2018-11-26 09:49:15

标签: typescript

我想定义一个映射的条件类型,以便可以从具有null值的类型中提取属性名称。

interface Person {
   name: string
   age: number 
   category: string | null
}

type NotNullablePersonProps = NotNullablePropertyNames<Person> 
// NotNullablePersonProps should be "name" | "age"

我看过following example

type OptionalPropertyNames<T> = {
    [K in keyof T]-?: undefined extends T[K] ? K : never
}[keyof T];

type RequiredPropertyNames<T> = {
    [K in keyof T]-?: undefined extends T[K] ? never : K
}[keyof T];

尽管如此,我仍然无法使其具有null属性的情况。

如何定义NotNullablePropertyNames映射条件类型以返回所有不能为null的属性名称?

1 个答案:

答案 0 :(得分:1)

如果启用了undefined,则在您提供的代码中用null替换strictNullChecks可以正常工作。如果没有该选项,string | null就是string,那么就没有提取物

interface Person {
   name: string
   age: number 
   category: string | null
}

type NotNullablePersonProps = NotNullablePropertyNames<Person> // name | age

type NotNullablePropertyNames<T> = {
    [K in keyof T]-?: null extends T[K] ? never : K
}[keyof T];

Playground link