我有一个非常简单的函数:
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);
那就没问题了。
这是为什么?
答案 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
不再影响泛型参数。