首页 > 解决方案 > 添加多种类型时,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 | undefined'类型的参数。 ”和“ '“h”' 类型的参数不可分配给'“i”类型的参数| null | 未定义'。

但如果我这样称呼它

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

然后就可以了。

这是为什么?

标签: typescript

解决方案


是的,它似乎只在早期版本上?

是的,版本 3.5.1 及以下是确切的链接

在这个例子中:

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

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

泛型参数始终是第二个参数的字面量,这就是引发错误的原因。

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


推荐阅读