【问题标题】:Check if method exists in a class in TypeScript [duplicate]检查TypeScript中的类中是否存在方法[重复]
【发布时间】:2018-04-28 08:26:21
【问题描述】:

我有一个类,其中的方法当前不存在,但稍后会添加。如果它存在,我想使用该方法,否则不存在。 例如。

Class A {
    public func(string s) {
        // Currently this method is not present in Class A
    }
}

我想检查这个方法是否存在,然后调用它,否则做别的事情。我找到了一个适用于 JavaScript 但不适用于 TypeScript 的解决方案:

let objectOfA = new A();
if ( objectOfA.func === function) {
    objectOfA.func();
}

但不知何故,这在 TypeScript 中不起作用,并引发编译错误说 Operator '===' cannot be applied to types 'string' and '() => any'

有没有一种方法可以检查 TypeScript 中的方法是否存在?

【问题讨论】:

  • 只要函数没有实现就注释掉函数调用即可。
  • @Cerbrus 实际上我想签入我的代码,该代码应该在执行不存在的功能之前/之后工作。
  • @Cerbrus 为什么以重复的方式关闭?这个问题是关于 TypeScript 的,而那个问题是关于 JS 的。 TypeScript 确实增加了相当多的难度。如果您尝试检查是否存在不存在的功能,那么工具会喊“这样的字段不存在,不要这样做”,这正是您检查的内容。但是,当您覆盖可能会或可能不会实现的方法时,检查其祖先是否存在是有意义的。

标签: javascript node.js typescript


【解决方案1】:

您可以使用typeof 运算符来获取操作数的ty。虽然使用括号表示法来获取未知属性(以避免抛出异常)。

let objectOfA = new A();
if ( typeof objectOfA['func'] === 'function') {
    objectOfA.func();
}

【讨论】:

  • 谢谢,但它仍然会抛出编译错误,提示“类型 'A' 上不存在属性 'func'。”
  • 是的,我试过了。它仍然显示相同的错误。
  • @ParagGangil : 试试typeof objectOfA['func'] === 'function' .... 你需要使用括号符号
猜你喜欢
  • 1970-01-01
  • 2021-06-16
  • 2017-02-13
  • 1970-01-01
  • 1970-01-01
  • 2016-02-29
  • 2017-05-29
  • 2020-09-14
  • 2018-06-19
相关资源
最近更新 更多