函数类型的类型保护

Zev*_*itz 1 typeof typescript

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

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

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

Dav*_*ret 5

typeof永远不会回来'Callback'。在这种情况下,它将进行检查instanceof Function

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

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

或者这也有效:

if (typeof arg === "function") {
    arg.call([]);
}
Run Code Online (Sandbox Code Playgroud)