typescript - 对象解构和转换
问题描述
我有两个接口:
export interface Foo {
__typename: "Foo";
id: string;
name: string | null;
otherThing: string | null;
}
export interface Bar {
__typename: "Bar";
id: string;
name: string | null;
}
我想将 Foo 类型的对象转换为 bar 类型。我可以使用对象解构内联吗?
解决方案
TypeScript 声明的接口不是“真实的”,我的意思是它们不是碰巧实现它们的对象的内在属性。接口只是编译时的抽象,用于安全检查和代码分析以及代码完成帮助。没有什么可以“转换”的。对象只是对象,您可以随心所欲地使用它们。
为了说服 TypeScript 接受一个正在使用的对象,就好像它实现了它最初没有实现的特定接口一样,您可以将该对象转换为不同的类型,但没有什么比解构或任何其他需要创建新对象或复制数据的方法涉及。该对象保持其原始状态,TypeScript 编译器只是以不同的方式看待它。
哦,只是为了确保你知道......
__typename: "Foo";
...不将值 "Foo" 分配给__typename
,它只是告诉 TypeScript "Foo" 是您可以__typename
在 TypeScript 代码中分配的唯一值,除非您使用强制转换或其他技巧使 TypeScript 忽略什么界面告诉它是允许的。
推荐阅读
- sql-server - 如何将具有检查约束的新列添加到具有单个 ALTER 表语句的表中?
- xml - 有没有办法在 Azure 存储帐户(BLOB)的 Visual Studio 中通过“XML 任务”执行 XSLT
- javascript - 如何使用 JavaScript 在 Excel 加载项中进行跨域 API 调用?
- javascript - 如何根据百分比添加 svg 圆?
- python - AttributeError:模块“win32ctypes.pywin32.win32api”没有属性“错误”
- python - 有没有办法使用python在json中列出未知数量的元素?
- node.js - 我如何在节点/adonis 中返回特定状态 + 消息?
- apache-spark - 修改 ArrayType 中的所有元素
- video-streaming - 如何在 Windows 中创建多播 RTP 流(使用 SDP)
- loops - AutoHotKey - 重复 if 语句在循环中不断将其条件视为 true