打字稿:联合类型作为接口

Typescript: Union Type as interface

我有一种情况需要一个函数来接受各种不同的类型。它们将在函数内由类型保护分隔。所以我使用这样的联合类型:

function(param: TypeA | TypeB): void {
    let callback: (param: TypeA | TypeB): void = () => {};

    if (isTypeA(param)) {
        callback = doSomethingWithTypeA;
    } else if (isTypeB(param)) {
        callback = doSomethingWithTypeB;
    }

    return callback(param);
}

其中函数doSomethingWithTypeA只接受类型A等。

如您所见,总是写出 (TypeA | TypeB) 非常冗长,特别是因为在我的实际代码中它不止两种类型。

有什么方法可以创建 (TypeA | TypeB) 的界面吗?
或者有其他方法可以实现吗?

如何创建一个接口:

interface MyType {
}

class TypeA implements MyType {
}

class TypeB implements MyType {
}

然后可以在方法中查看:

function(param: MyType): void {
    let callback: (param: MyType): void = () => {};

    if (param instanceof TypeA) {
        callback = doSomethingWithTypeA;
    } else if (param instanceof TypeB) {
        callback = doSomethingWithTypeB;
    }

    return callback(param);
}

使用type aliases:

type YourType = TypeA | TypeB // | ... and so on