我想在运行时检查两个接口(interface)是否相等,然后执行一些代码。我注意到一个库条件类型检查可以比较类型并返回 true 或 false 类型,但我不确定如何将它用于我的情况。
这就是我目前所拥有的
type IDialogUnchanged = IsExact<IDialog, IDialogOrig>;
返回 true 或 false 类型
最佳答案
简短: 你不能。但如果您可以改变您的要求,它们是可以给您类似结果的黑客/解决方法/方法。
长: 接口(interface)在运行时不存在,因此您无法提取有关其成员的数据和/或比较它们。界面是设计时工具,适合您,用于自动完成等。它们在运行时消失。但是,几乎没有其他选择。
- 您可以发出类型信息,然后在运行时检索它。我不知道有什么方法可以获取运行时的完整类型信息(例如 Java 或 C# 反射,但也许一些工具已经存在)。与this package (reflect-metadata)您可以发出构造函数参数类型,然后使用它们。
- 如果您有对象作为特定接口(interface)/类的实例,您始终可以使用Object.keys(obj)逐键比较它们 - 它返回给定类型的字段名称数组(不正如我提到的,不能与接口(interface)一起工作,在运行时不存在)。
- 此外,instanceof 运算符可能正是您所需要的。如果对象是给定类的实例,它将返回 true。如果您要对要比较的两种类型(例如 A 和 B)执行检查 (obj instanceof A && obj instanceof B),其中 B 扩展 A 并且 obj 属于 B 类型,则此语句的结果将为 true。
希望你能找到出路。如果没有,请提供更多详细信息或提供该图书馆的名称。问候。
关于typescript - 在运行时比较两个接口(interface),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56258641/