【问题标题】:Type guard of function type函数类型的类型保护
【发布时间】:2015-04-05 18:49:27
【问题描述】:

我有一个函数,其联合类型介于 string 和函数类型之间。如何编写类型保护以缩小到该函数类型? (以下不起作用。)

interface Callback {
    (args: any[]): void
}

var fn = function(arg: string | Callback) {
    if (typeof arg == 'Callback') {
        arg.call([]);
    }
}

【问题讨论】:

  • typeof 运算符 从不 返回 'Callback'。它总是返回“function”、“string”、“number”、“boolean”、“object”或“undefined”之一。

标签: typescript typeof


【解决方案1】:

typeof 永远不会返回 'Callback'。在这种情况下,可以进行instanceof Function 检查:

interface Callback {
    (args: any[]): void
}

var fn = function(arg: string | Callback) {
    if (arg instanceof Function) {
        arg.call([]);
    }
};

另外,这也有效:

if (typeof arg === "function") {
    arg.call([]);
}

【讨论】:

  • typeof arg === 'string' 不同,使用typeof arg === 'function' 不会导致TypeScript 将arg 识别为函数,因此在call 上会出现编译错误。
  • @ZevSpitz 这很奇怪......我没有这个问题。 See here arg 如何被识别为Callback
  • @DavidSherret 奇怪的是,如果您添加 else { arg += "foo"; },它将不再正常工作。
猜你喜欢
  • 2020-06-27
  • 2020-09-16
  • 2019-03-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-26
  • 2019-02-10
  • 1970-01-01
相关资源
最近更新 更多