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

Typescript 无法将函数分配给具有泛型参数的类型,typescript,typescript-generics,Typescript,Typescript Generics,我有一个问题,可以归结为尝试将具有特定参数类型的函数分配给期望具有泛型类型的函数的变量: const s: <T>(v: T)=>string = (v: string[])=>(v[0]||'x'); const s:(v:T)=>字符串 =(v:string[])=>(v[0]| |'x'); Typescript出现以下错误: Type'(v:string[])=>string'不可分配给Type'(v:T)=>string'。参数“v”和“v”的类型不

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

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

Typescript出现以下错误:

Type'(v:string[])=>string'不可分配给Type'(v:T)=>string'。参数“v”和“v”的类型不兼容。类型“T”不可分配给类型“string[]”

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


有一个相关的问题也有相同的潜在问题,但答案是针对该问题中的具体情况而定的:

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

正如kaya3所述,您正在尝试将采用特定类型的函数,
string[]
,分配给采用泛型类型的函数。您可以改为使用泛型签名定义一个类型。然后创建一个函数,该函数接受该泛型签名的一个特定实例。大概是这样的:

typemytype=(v:T)=>string;
常量s:MyType=(v:string[])=>v[0]| |'x';
如果您只有一种类型,这就足够了:

const s=(v:string[])=>v[0]| |“x”;

(v:T)=>string
表示可以使用任何内容并输出字符串的函数类型;函数只能使用字符串数组。
const s:(v:T)=>string=(v:string[])=>(v[0]| |“x”)