我有一个界面包含多个字段,而另一个界面则包含几乎所有字段(仅一个)。
如何在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
。
答案 0 :(得分:1)
如果您不介意中间步骤,则可以执行以下操作:
ActionMailer
这结合了spread and rest operators。编译器似乎对我的机器很满意,它给了我您期望的结果。
注意:这还会创建常量const { fieldF, ...everythingExceptF } = a;
const b: B = everythingExceptF;
,您可能想要也可能不需要。如果在同一范围内由于其他原因已经需要该名称,则可以这样重新分配它:
fieldF
答案 1 :(得分:0)
如果您想删除该字段,则可以:
const copy: A = {
...a
};
delete copy.fieldF;
const b: B = copy;
但是您不必:
const b: B = {
...a
};
编译器可以。