typescript 深度合并通用嵌套对象A和B,同时用A的属性覆盖B的重复属性

xzv2uavs  于 2023-01-06  发布在  TypeScript
关注(0)|答案(1)|浏览(301)

我有两个结构相似的未知(通用)嵌套对象:

const A = {
  one: {
    two: {
      three: {
        func1: () => null,
      },
    },
  },
}
const B = {
  one: {
    two: {
      three: {
        func2: () => null,
      },
    },
  },
}

我想创建一个类型,将它们合并在一起,这样func1func2都存在于one.two.three中,但onetwothree只引用A的属性。
交叉点使我接近,但并不完全是我所需要的。例如,当我这样做时:

const C: typeof A & typeof B = {}

C.one.two.three.func1() // Valid
C.one.two.three.func2() // Valid

这两个函数都应该是three中的值,但是每个共享属性都引用回A和B,而我需要它只引用回A。
例如,如果我想从C变量跳转到three的定义,我的IDE将显示两个可以跳转到的定义(A和B),但我只希望Typescript关注A,并让我的IDE跳转到A,因为这是唯一的选择。

u5rb5r59

u5rb5r591#

这可以通过ts-toolbelt的深补丁来实现。

import type { Object } from "ts-toolbelt"

type MergedTrpc = Object.Patch<A, B, "deep">

相关问题