代码之家  ›  专栏  ›  技术社区  ›  miensol

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

  •  1
  • miensol  · 技术社区  · 6 年前

    我想定义一个映射的条件类型,以便可以从具有 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];
    

    无效的 不过是酒店。

    NotNullablePropertyNames 映射的条件类型以返回所有不能为 无效的 ?

    1 回复  |  直到 6 年前
        1
  •  1
  •   Titian Cernicova-Dragomir    6 年前

    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