当前位置: 首页 > 知识库问答 >
问题:

无法将函数分配给具有泛型参数的类型

宰父飞白
2023-03-14

我有一个问题,归结为试图将具有特定参数类型的函数分配给期望具有泛型类型的函数的变量:

const s: <T>(v: T)=>string 
  = (v: string[])=>(v[0]||'x');

游乐场版。

TypeScript给出以下错误:

类型“(v:string[]))=

这个错误对我来说没有多大意义,因为对于泛型t,似乎string[]是一个非常合理的类型。

有一个相关的问题具有相同的基本问题,但是答案是特定于该问题的情况的:为什么实现接口的TypeScript类不能分配给扩展接口的通用约束?

共有2个答案

吕钧
2023-03-14

您试图获取一个接受字符串数组并返回字符串的函数,并将该函数分配给一个接受任何T并返回字符串的变量。接受字符串数组作为输入的函数不能接受任何T作为输入。

匡安宜
2023-03-14

正如kaya3所提到的,您正试图将一个采用特定类型的函数string[]分配给一个采用泛型类型的函数。相反,您可以使用泛型签名定义一个类型。然后创建一个函数,该函数接受该泛型签名的一个特定实例。像这样的东西:

type MyType<T> = (v: T) => string;
const s: MyType<string[]>  = (v: string[]) => v[0] || 'x' ;

如果您只有一种类型,这就足够了:

const s  = (v: string[]) => v[0] || 'x' ;
 类似资料: