Typescript 带泛型的隐式类型

Typescript 带泛型的隐式类型,typescript,generics,Typescript,Generics,我目前正在修一门关于打字脚本的课程,我想知道以下几点。为什么extends T是下面函数的约束条件?我认为约束应该是返回参数length,因为length是string的一个属性 function genericInferred<T extends string>(param: T) { return param.length; } console.log(genericInferred("Four")); type UU

我目前正在修一门关于打字脚本的课程,我想知道以下几点。为什么
extends T
是下面函数的约束条件?我认为约束应该是
返回参数length
,因为length是string的一个属性

function genericInferred<T extends string>(param: T) {
        return param.length;
    }
    console.log(genericInferred("Four"));

    type UUID = string;
    let id: UUID = "123-456";
    console.log(genericInferred(id));
函数泛型错误(参数:T){
返回参数长度;
}
console.log(genericInferred(“四”));
类型UUID=字符串;
let id:UUID=“123-456”;
console.log(genericInferred(id));

在TypeScript中,泛型约束定义为可以调用函数的类型。函数在其体中做什么,或者函数返回什么,都无关紧要

只要查看参数列表(包括泛型),就可以始终识别约束。这里是:

<T extends string>(param: T)
(参数:T)

所以“约束”只是
param
是一个
T
,而
T
是一个字符串。

老实说,在这个特定场景中使用泛型没有任何意义,因为您返回的是一个
数字

如果要返回依赖于类型
T
的类型,则使用
T extends string
是有意义的,因为使用泛型意味着字符串文字和字符串文字的并集将保留其特定值,而不是扩展到
string

function genericInferred<T extends string>(param: T): { someKey: T } {
     return {
         someKey: param
     };
}
函数genericInferred(param:T):{someKey:T}{
返回{
someKey:param
};
}
这里我们可以返回
{someKey:T}
,而不是
{someKey:string}
。请查看此表中返回类型的差异