TypeScript泛型约束到多个基本类型

时间:2017-12-07 16:21:08

标签: typescript

鉴于此功能:

myFunc(object: string | null): string | null {}

我希望当对象为string时,此函数的返回类型为string,而当对象的类型为string | null时,返回类型为string | null。< / p>

我试过了:

myFunc<T extends string | null>(object: T): T {
    return "returnValue"; //Type '"returnValue"' is not assignable to type 'T'.
}

myFunc<T extends string & null>(object: T): T {
    return "returnValue"; //Type '"returnValue"' is not assignable to type 'T'.
}

两者都产生相同的编译错误。我没有找到正确的语法来执行此操作。

1 个答案:

答案 0 :(得分:6)

我无法相信我实际上会建议超载,因为我花了很多时间来解释如何避免大部分问题......但是过载将是模拟这种情况的好方法! / p>

class Example {
    myFunc(obj: string): string;
    myFunc(obj: string | null): string | null;
    myFunc(obj: string | null): string | null {
        return "returnValue";
    }
}

function test(a: string | null, b: string) {
    const example = new Example();

    // resultA: string | null
    const resultA = example.myFunc(a);

    // resultB: string
    const resultB = example.myFunc(b);
}

在上面的示例中,返回类型映射到输入类型,因此resultAresultB具有预期类型,如果您正在运行启用严格空检查