typescript - 在运行时比较两个接口(interface)

标签 typescript

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

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

返回 true 或 false 类型

最佳答案

简短: 你不能。但如果您可以改变您的要求,它们是可以给您类似结果的黑客/解决方法/方法。

长: 接口(interface)在运行时不存在,因此您无法提取有关其成员的数据和/或比较它们。界面是设计时工具,适合您,用于自动完成等。它们在运行时消失。但是,几乎没有其他选择。

  1. 您可以发出类型信息,然后在运行时检索它。我不知道有什么方法可以获取运行时的完整类型信息(例如 Java 或 C# 反射,但也许一些工具已经存在)。与this package (reflect-metadata)您可以发出构造函数参数类型,然后使用它们。
  2. 如果您有对象作为特定接口(interface)/类的实例,您始终可以使用Object.keys(obj)逐键比较它们 - 它返回给定类型的字段名称数组(不正如我提到的,不能与接口(interface)一起工作,在运行时不存在)。
  3. 此外,instanceof 运算符可能正是您所需要的。如果对象是给定类的实例,它将返回 true。如果您要对要比较的两种类型(例如 A 和 B)执行检查 (obj instanceof A && obj instanceof B),其中 B 扩展 A 并且 obj 属于 B 类型,则此语句的结果将为 true。

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

关于typescript - 在运行时比较两个接口(interface),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56258641/

相关文章:

html - Angular 2 中的表单验证

typescript - catch block 上对象的类型为 'unknown'

javascript - TypeScript 中是否可以有通用的装饰器,可以根据其输入/输出类型进行链接?

TypeScript:错误:使用路径时找不到模块

node.js - sequelize.define() 在 TypeScript 中返回什么类型?

javascript - 如何在 Nest.js 中使用查询参数?

Angular 5 ngOnChanges 在子组件中只触发一次

typescript ,限制第二个参数依赖于第一个参数类型

typescript - 使用 webpack 从 typescript 导入 html

javascript - NodeJS (JavaScript/TypeScript) - 读取 Parquet 文件时出错