首页 > 解决方案 > 如何从类型中提取不可为空的属性名称?

问题描述

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

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

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

我看过下面的例子

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

标签: typescript

解决方案


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];

游乐场链接


推荐阅读