TypeScript基于现有类型定义新类型

qxgroojn  于 2023-04-22  发布在  TypeScript
关注(0)|答案(1)|浏览(178)

我是新来的
存在两种类型:

type A {
    prop1: string
    prop2: B
}

type B {
    prop3: string
    prop4: boolean
}

现在我想创建一个新的类型作为扁平版本的A+B

{
    prop1: string
    prop3: string
    prop4: boolean
}

如何在typescript中做到这一点?通过引用现有类型。

xxhby3vn

xxhby3vn1#

您可以使用此类型:

type A  = {
        prop1: string
        prop2: B
    }
    
   type B = {
        prop3: string
        prop4: boolean
    }
    
    type UnionToIntersection<U> = (U extends any ? (k: U) => void : never) extends ((k: infer I) => void) ? I : never;
    type Flatten<T, K extends keyof T> = UnionToIntersection<T[K]> & Omit<T, K>;
    
    type Both = Flatten<A,'prop2'>
    
    const result: Both = {prop1: 'one', prop3: 'two', prop4: false}

编辑:这更简单:

type Flatten<T, K extends keyof T> =  Omit<T, K> & T[K];
type Both = Flatten<A,'prop2'>

相关问题