Typescript - 如何将部分类型分配给另一个对象的相同类型的属性?

Vis*_*hal 2 javascript typescript typescript-typings

我正在编写单元测试用例,我需要对象的非常有限的属性。

现在有一种情况,我将一个 Partial 对象分配给另一个对象的 T 类型属性。但 TS 错误指出我无法将 Partial 分配给 T 类型,我理解应该是这样。

但那我应该如何分配对象呢?

下面是我试图解决的示例。

const a: Partial<A> = {
  a1: "my a1 prop"
};
const b: Partial<B> = {
  b1: "my b1 prop",
  b2: a,
}
// A: {a1: string, a2: string, a3: string}
// B: {b1: string, b2: A, b3: string}
Run Code Online (Sandbox Code Playgroud)

所以,在这里我想将“a”对象分配给“b2”属性,而不创建 整个“a”对象

现在,Partial 使 b2 属性可选,但它并不使所有嵌套属性也可选。

那么,有什么方法可以让我在不先创建整个“a”对象的情况下完成这项任务呢?

jca*_*alz 5

您可能想要一个DeepPartial类似于Partial但通过属性向下递归的对象。你可以这样定义它:

type DeepPartial<T> = { [K in keyof T]?: DeepPartial<T[K]> }
Run Code Online (Sandbox Code Playgroud)

然后用它代替Partial

const a: DeepPartial<A> = {
    a1: "my a1 prop"
};
const b: DeepPartial<B> = {
    b1: "my b1 prop",
    b2: a
} // okay
Run Code Online (Sandbox Code Playgroud)

这满足您的需求吗?希望能帮助到你; 祝你好运!

Playground 代码链接