我有一个包含许多字段的界面,而另一个包含几乎所有字段的界面(少一个)。
如何在TypeScript 中不使用未类型化的不安全拐杖(<>
,as
,any
,unknown
和类似名称)来排除对象散布的中的字段(以便不枚举我要复制的每个字段)?
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/