【发布时间】:2021-10-30 14:48:35
【问题描述】:
我有一个 interfaceA1 和 interfaceB 有一些共同的属性
interface A1 {
id : string,
version: number,
data: userData,
createdBy: string
}
interface userData {
data: string,
status: string
}
interface B {
id : string,
version: number,
definition : JSON
}
所以,在interfaceA1和interfaceB之间有一些id,version等属性是通用的
我有一个 interfaceA 类型的变量,具有以下值
let interfaceA1Data: interfaceA1 = {
id : '123abc',
version: 1,
data: {
data: 'value',
status: 'value'
},
createdBy: 'me'
}
我还有一个 interfaceB 类型的变量,刚刚声明了
let interfaceBData: interfaceB
现在我想将常用属性的值从 interfaceA1Data 复制到 interfaceBData。非通用属性应添加到定义属性中。因此,最终 interfaceBData 将保存以下值。
interfaceBData = {
id : '123abc',
version: 1,
definition: {
data: {
data: 'value',
status: 'value'
},
createdBy: 'me'
}
}
如何在打字稿中实现这一点?
转换器应该是通用的,如果我有一个 interfaceA2,如何转换为 interfaceB 类型。在所有情况下,目标接口都相同,只有源接口不同。
interface A2 {
id : string,
version: number,
value: valueType,
createdBy: string
}
interface valueType {
type: string,
requester: string
}
【问题讨论】:
-
“属性”是错误的术语。 TypeScript+JavaScript 不是 Python:对象成员被称为“属性”。
-
TypeScript 在 type-erasure 的基础上工作(类型不会在运行时具体化),因此 TypeScript 不能自己过滤属性 - 你需要复制手动设置值 - 尽管您可以通过明智地应用
Object.assign来减少工作量。 -
嗨,我可以得到一些如何实现这一点的入门代码吗?
标签: javascript typescript interface clone