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

Typescript中“Pick”的反义词

  •  4
  • Eduard  · 技术社区  · 6 年前

    Pick ,将从对象类型中删除某些属性。

    它应该这样工作:

    type ObjectType = { 
        key1: number, 
        key2: string, 
        key3: boolean, 
        key4: number[] 
    }
    
    let obj: Remove<ObjectType, 'key2' | 'key4'>
    

    obj 的类型应为:{key1:number,key3:boolean}

    2 回复  |  直到 6 年前
        1
  •  19
  •   Eduard    6 年前

    key2 key4 ,这将起作用:

    type Without<T, K extends keyof T> = Pick<T, Exclude<keyof T, K>>
    
    let obj: Without<ObjectType, 'key2' | 'key4'>
    

    Exclude<keyof T, K> 退货 'key1' | 'key3'

    Pick<T, Exclude<keyof T, K>> 返回所需结果 { key1: number, key3: boolean }

        2
  •  17
  •   Josiah Nunemaker Sayed Ibrahim Hashimi    5 年前

    在TypeScript 3.5中,有一个 Omit 如您所述的帮助程序。

    type ObjectType = { 
        key1: number, 
        key2: string, 
        key3: boolean, 
        key4: number[] 
    }
    
    let obj: Omit<ObjectType, 'key2' | 'key4'> // type is { key1: number, key3: boolean }
    

    对于旧版本的TypeScript(>2.8),您可以使用 Pick Exclude 正如爱德华在回答中提到的。

    我经常创建一个helper类型,使事情不那么冗长(注意,这是在ts3.5中使用的确切定义)

    type Omit<T, K extends keyof any> = Pick<T, Exclude<keyof T, K>>;
    
        3
  •  1
  •   Ben Carp    5 年前

    import { Omit } from "utility-types"
    
    interface IHouse {
        rooms: number 
        gardenSize: number
        toilets: number
    }
    
    type Appartment = Omit<IHouse, "gardenSize">