首页 > 解决方案 > 对象解构和转换

问题描述

我有两个接口:

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 接受一个正在使用的对象,就好像它实现了它最初没有实现的特定接口一样,您可以将该对象转换为不同的类型,但没有什么比解构或任何其他需要创建新对象或复制数据的方法涉及。该对象保持其原始状态,TypeScript 编译器只是以不同的方式看待它。

哦,只是为了确保你知道......

__typename: "Foo";

...不将值 "Foo" 分配给__typename,它只是告诉 TypeScript "Foo" 是您可以__typename在 TypeScript 代码中分配的唯一值,除非您使用强制转换或其他技巧使 TypeScript 忽略什么界面告诉它是允许的。


推荐阅读