typescript - 如何忽略对象传播中的字段?

标签 typescript

我有一个包含许多字段的界面,而另一个包含几乎所有字段的界面(少一个)。

如何在TypeScript 中不使用未类型化的不安全拐杖(<>asanyunknown和类似名称)来排除对象散布的中的字段(以便不枚举我要复制的每个字段)?

interface A {
    fieldA: number;
    fieldB: string;
    fieldC: number;
    fieldD: string;
    fieldE: number;
    fieldF: string;
}

interface B {
    fieldA: number;
    fieldB: string;
    fieldC: number;
    fieldD: string;
    fieldE: number;
    // no fieldF here
}

const a: A = {
    fieldA: 1,
    fieldB: 'b',
    fieldC: 3,
    fieldD: 'd',
    fieldE: 5,
    fieldF: 'f'
}

const b: B = {
    ...a,
    fieldF: undefined
};

这不会编译,因为fieldF仍然存在,仅具有undefined的值。

最佳答案

如果您不介意中间步骤,则可以执行以下操作:

const { fieldF, ...everythingExceptF } = a;
const b: B = everythingExceptF;

这结合了spread and rest operators。编译器似乎对此很满意,它给了我您期望的结果。

注意:这还会创建常量fieldF,您可能想要也可能不需要。如果由于其他原因在同一范围内已经需要该名称,则可以这样重新分配它:
const { fieldF: someOtherName, ...everythingExceptF } = a;

关于typescript - 如何忽略对象传播中的字段?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53988964/

相关文章:

javascript - 短 IF 抛出 TypeError,如果工作正常则正常 - 相同的条件,为什么?

typescript - 如何在 TypeScript 中动态地在另一个接口(interface)中使用一个接口(interface)的键?

typescript - 在 TypeScript 中将父类(super class)型断言为泛型参数

typescript - Observable 在 Angular 2 Beta 3 中被破坏了吗?

javascript - TypeScript、对象和类型区分

typescript - 有人能解释一下 '[P in keyof O]: O[P];'是什么意思吗?

Angular 5 标题服务未定义

javascript - 在 JavaScript 代码中重构 switch-case 语句

javascript - 人们分配变量后,Angular 6/Typescript 属性为 "undefined"

javascript - typescript :Map.has 没有返回正确的值