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

时间:2020-06-23 14:18:06

标签: 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}

因此,在这里我想将“ a”对象分配给“ b2”属性,而无需创建 整个“ a”对象

现在,Partial使b2属性成为可选属性,但并没有使所有嵌套属性也成为可选属性。

那么,有什么方法可以 来完成此任务而不先创建整个“ a”对象?

2 个答案:

答案 0 :(得分:2)

您可能想要像DeepPartial的{​​{1}},但通过属性向下递归。您可以这样定义它:

Partial

然后使用它代替type DeepPartial<T> = { [K in keyof T]?: DeepPartial<T[K]> }

Partial

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

Playground link to code

答案 1 :(得分:1)

您可以将类型b2设置为Partial

type A = { a1: string; a2: string; a3: string };
type B = { b1: string; b2: A; b3: string };

type B1 = { b1: string; b2: Partial<A>; b3: string };

或使用DeepPartial

type DeepPartial<T> = T extends Function ? T : T extends object ? { [P in keyof T]?: DeepPartial<T[P]> } : T;
type B2 = DeepPartial<B>;

Playground

相关问题