繁体   English   中英

打字稿泛型返回类型

[英]Typescript generics return type

我是打字稿的新手,我正试图围绕泛型的工作原理进行思考。 我想知道为什么下面的代码不飞:

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

let output = identity<number>(1);

我收到错误消息:“数字”类型不可分配给“T”类型。 如果函数的输入是数字,这是否意味着 number 的返回类型也应该起作用,因为我们说 T 是数字类型?

你必须像对待现有的任何类型一样对待T 你的函数负责人说:我想要一个 T 类型的参数并返回 T 类型的东西。

但是,您的代码始终返回一个number ,该number不必是T 在您的示例中调用它,但您可以使用identity<string>("test")调用它并期望返回一个字符串,但它仍然是一个number 冲突由此而来。

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

function identity<T>(arg: T)

我们在这里说的是这个函数接受一个T类型的参数(我们没有提前指定,它可以是任何东西),并且它返回一个T类型的值。

鉴于没有关于T任何信息,唯一可以返回这种类型值的函数是重用提供的参数。 换句话说,恒等函数只有一种且只有一种可能的实现——返回其参数的实现。

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

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

短篇小说,你应该像这样更正你的功能:

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

let output = identity<number>(1)


console.log(output);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM