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

标签 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”对象的情况下完成这项任务吗?

最佳答案

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

type DeepPartial<T> = { [K in keyof T]?: DeepPartial<T[K]> }

然后使用它代替 Partial:

const a: DeepPartial<A> = {
    a1: "my a1 prop"
};
const b: DeepPartial<B> = {
    b1: "my b1 prop",
    b2: a
} // okay

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

Playground link to code

关于javascript - Typescript - 如何将部分类型分配给另一个对象的相同类型的属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62536882/

相关文章:

javascript - Electron 按钮配置

javascript - 从index.ts导入返回未定义

javascript - 如何在 typescript 项目中导入js文件?

typescript -///<reference types ="node"/> 是什么意思?

javascript - 单击时删除项目并将这些项目移动到列表底部

javascript - 理解 javascript typeof 日期行为

javascript - field 的谷歌地图地理编码器

angularjs - 如何使用不污染全局范围的 TypeScript 类定义 AngularJS 服务?

typescript - 为什么类型 "never"在联合类型中毫无意义?

reactjs - 使用别名而不是相对路径创建的 typescript 声明文件