typescript - 从一个对象复制到另一个对象 - 仅来自其接口的公共属性的值
问题描述
我有一个interfaceA
具有 2 个属性的接口 ( ) 和另一个interfaceB
具有 3 个属性的 ( ) (数字只是示例)。
我已经创建了一个对象(类型:)interfaceB
,我想创建另一个对象(类型:)interfaceA
,并且只将公共属性中的值从 B 复制到 A。
一种解决方案是复制所有字段并删除第三个,但我不喜欢这样。
另一种解决方案是创建一个只包含我需要的属性的新对象,但我也不喜欢这样。
在这两种解决方案中,如果有人向其中一个接口添加属性,我也必须在分配中添加或删除该属性。
我的问题有什么解决办法吗?
我创建了一个StackBlitz来帮助您更好地理解。
解决方案
这能解决你的问题吗?
function copyValues(objA: interfaceA, objB: interfaceB) {
Object.entries(objB).forEach(([key, value]) => {
if (objA.hasOwnProperty(key)) {
objA[key] = value;
}
});
}
PS:如果没有,则不可能,您需要知道 objectA 在运行时具有哪些键的信息-AFAIK 无法从类型中生成该键。例如,您可以获得表示您想要的类型的类型,Extract<keyof interfaceB, keyof interfaceA>
但无法将其转换为运行时可用的形式。
推荐阅读
- c# - 单击 DataGridViewButton 时的新行
- reactjs - 如何删除反应应用程序并打开现有的应用程序
- android - 无法在 ClipboardManager primaryClip 重新分配 Val
- python-3.x - 字体不会改变 - python3/tkinter
- package - 如何在 Yocto 中将预构建的包添加到图像中?
- android - 失去新活动的所有价值 - Kotlin
- debugging - 如何在打开 QuickView 窗口的同时浏览代码?
- php - 如何使用 XAMPP 打开 PHP 文件?
- javascript - 如何在 Chrome 中正确预取 json 端点?
- android - 如何在关注可重用性和关注点分离的 android 库模块之间实现导航?