如何在typescript方法中推断泛型返回值?

如何在typescript方法中推断泛型返回值?,typescript,typescript-generics,Typescript,Typescript Generics,我想更好地理解typescript如何使用泛型推断返回类型。如果在没有泛型类型参数的情况下调用使用泛型类型作为返回值的方法,那么typescript如何推断返回类型?我理解,通过发送的类型可以很容易地推断泛型in参数,但如果没有提供泛型类型参数,则无法推断返回参数的方式 //调用: 这个。得到一些东西(价值); //方法签名: getSomething(参数:string):T{ ... } > p>让我们考虑获取()/方法: getSomething<T>(inParameter

我想更好地理解typescript如何使用泛型推断返回类型。如果在没有泛型类型参数的情况下调用使用泛型类型作为返回值的方法,那么typescript如何推断返回类型?我理解,通过发送的类型可以很容易地推断泛型in参数,但如果没有提供泛型类型参数,则无法推断返回参数的方式

//调用:
这个。得到一些东西(价值);
//方法签名:
getSomething(参数:string):T{
...
}

<代码> > p>让我们考虑<代码>获取()/<代码>方法:

getSomething<T>(inParameter: string): T {
  return null!; // <-- this isn't safe, whatever you put here
}
如果调用
const t:string=this.getSomething(value)
它将使用 决定
t
必须是
string

const t: string = this.getSomething("value");
// contextual typing, T is inferred as string

但是,如果调用者提供一个
T
类型的参数,或者某个本身可能产生
T
类型的值,则对安全性和推理都有好处。例如:

getSomethingReasonable<T>(inParameter: string, tArray: T[]): T {
  return tArray[inParameter.length];
}

const okay = this.getSomethingReasonable("value", [1,2,3,4,5,6,7,8]);   
// inference on tArray, T is number
getsomethingsreasonal(参数:string,tArray:T[]):T{
返回tArray[参数长度];
}
const okay=this.GetSomethingRational(“值”[1,2,3,4,5,6,7,8]);
//关于tArray的推论,T是数字
它更安全,因为输入
tArray
提供了一种运行时机制,即使使用类型擦除,也可以生成
T
类型的值。正如您所指出的,这是推断
T
的好方法


好的,希望能有帮助。祝你好运

getSomethingReasonable<T>(inParameter: string, tArray: T[]): T {
  return tArray[inParameter.length];
}

const okay = this.getSomethingReasonable("value", [1,2,3,4,5,6,7,8]);   
// inference on tArray, T is number