Typescript泛型返回类型

时间:2020-03-18 16:25:04

标签: typescript

我是TypeScript的新手,我正在努力围绕泛型的工作原理。我想知道为什么以下代码不起作用:

function identity<T>(arg: T): T {
    let num: number = 2;
    return num;
}

let output = identity<number>(1);

我得到错误:类型'number'不能分配给类型'T'。如果函数的输入是数字,那不是说数字的返回类型也应该工作,因为我们说的是T是数字类型?

3 个答案:

答案 0 :(得分:0)

您必须将T视为现有的任何类型。您的函数头说:我想要一个T类型的参数并返回T类型的东西。

您的代码始终返回number,而不必为T。在您的示例中调用了is,但是您可以使用identity<string>("test")进行调用,并期望返回一个字符串,但是它仍然是number。就是这样。

答案 1 :(得分:0)

让我们看看您的身份函数的类型签名。

function identity<T>(arg: T)

我们在这里所说的是该函数接受类型T的参数(我们没有预先指定,可以是任何东西),并且返回类型T的值。

鉴于没有关于T的任何信息,该函数唯一可以返回此类类型的值的方法是重用提供的参数。换句话说,身份函数只有一种可能的实现,即返回其参数的一种实现。

function identity<T>(arg: T) { return arg }

错误消息正好告诉您:Type 'number' is not assignable to type 'T',这是正确的,因为T是通用的:)

答案 2 :(得分:0)

短篇小说,您应该像这样纠正您的功能:

function identity<T>(arg: T): T {
    let num: T = arg;
    return num;
}

let output = identity<number>(1)


console.log(output);