功能类型的类型保护

时间:2015-04-05 18:49:27

标签: typescript typeof

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

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

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

1 个答案:

答案 0 :(得分:2)

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([]);
}