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

如何删除“从不”类型的键?

  •  1
  • mpen  · 技术社区  · 4 年前

    我创建了一个名为 Override 我觉得这很方便,但有一件事一直困扰着我,那就是完全 去除 财产。

    在下面的例子中,我想要 Bar 挽留 a 从…起 Foo 推翻 b 成为一名 string 而不是 number ,然后移除 c 然而 C 到处都是,只是按 never .我怎样才能删除所有的Never intead?

    type Override<A, B> = Omit<A, keyof B> & B
    
    type Foo = {
        a: string
        b: number
        c: boolean
    }
    
    type Bar = Override<Foo, {
        b: string
        c: never
    }>
    
    function f(bar: Bar) {
       console.log(bar.c)
    }
    

    Playground

    1 回复  |  直到 4 年前
        1
  •  1
  •   CertainPerformance    4 年前

    而不是 & B ,则可以与新对象类型的映射相交,且永远不会删除值。

    type Override<A, B> = Omit<A, keyof B> & {
        [K in keyof B as B[K] extends never ? never : K]: B[K]
    }
    

    这可以扩展到删除任何类型的值。

    type Override<A, B> = Omit<A, keyof B> & {
        [K in keyof B as B[K] extends never | void ? never : K]: B[K]
    }
    
    推荐文章