添加多种类型时,Typescript 函数抱怨参数类型不可分配

时间:2021-03-03 08:00:30

标签: typescript

我有一个非常简单的函数:

function foo<T>(input: T, def: T) : T {
    return !!input ? input : def;
}

这么叫

foo(6, 7);
foo("h", "i")

没问题。

现在如果我改为

function foo<T>(input: T | null | undefined, def: T) : T {
    return !!input ? input : def;
}

我收到了诸如“类型‘6’的参数不能分配给类型‘7 | null |未定义’的参数。”和“类型‘’h”的参数’这样的错误不能分配给类型为 '"i" | null | undefined' 的参数。"

但是如果我这样称呼它

const h: string = "h";
const i: string = "i";
foo(h, i);

那就没问题了。

这是为什么?

1 个答案:

答案 0 :(得分:1)

<块引用>

是的,似乎只有早期版本?

是的,确切地说是 3.5.1 及以下版本Link

在这个例子中:

function foo<T>(input: T | null | undefined, def: T) : T {
    return !!input ? input : def;
}

foo(6, 7);
foo("h", "i");

泛型参数始终是第二个参数的文字,这就是为什么这会引发错误。

在以后的版本中,null | undefined 不再影响泛型参数。