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

时间:2017-04-20 10:07:46

标签: typescript types union-types

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

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只接受typeA等等。

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

是否有某种方法可以创建(TypeA | TypeB)的界面? 或者还有其他方法可以实现这一目标吗?

2 个答案:

答案 0 :(得分:4)

使用type aliases

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

答案 1 :(得分:0)

如何创建界面:

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);
}