在运行时比较两个接口

时间:2019-05-22 14:00:28

标签: typescript

我想在运行时检查两个接口是否相等,然后执行一些代码。我注意到一个库的条件类型检查可以比较类型并返回true或false类型,但是我不确定如何在我的情况下使用它。

这是我到目前为止所拥有的 type IDialogUnchanged = IsExact<IDialog, IDialogOrig>;

返回正确或错误的类型

1 个答案:

答案 0 :(得分:2)

简短: 你不能但是,如果您可以更改要求,它们是可以为您提供类似结果的黑客/变通方法/方式。

长: 接口在运行时不存在,因此无法提取有关其成员的数据和/或对其进行比较。界面是设计时工具,对您来说,用于自动完成等。它们在运行时消失。但是,其他选项很少。

  1. 您可以发出类型信息,然后在运行时对其进行检索。我不知道在运行时获取完整类型信息的任何方式(例如Java或C#反射,但是可能已经存在一些工具)。使用this package (reflect-metadata),可以发出构造函数参数类型,然后使用它们。
  2. 如果您将对象作为特定接口/类的实例,则始终可以使用 Object.keys(obj)逐项比较它们-它返回给定类型的字段名称数组(doesn就像我提到的那样,不能在运行时使用接口。)
  3. 此外,操作员实例可能是您所需要的。如果对象是给定类的实例,则它将返回true。如果要对两个要比较的类型(例如A和B)执行检查(A实例和A实例,B都在其中B扩展了A,而obj则是B类型),则由于此语句,您将得到true。

希望您可以出路。如果没有,请提供更多详细信息或提供该图书馆的名称。问候。