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

亚历克斯·图伦霍夫(Alex Tullenhoff)

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

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

游乐场版本

Typescript出现以下错误:

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

这个错误对我来说并没有多大意义,因为似乎string[]对通用类型使用的是完全合理的类型T

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

西信

如kaya3所述,您尝试将采用特定类型的函数分配给string[]采用通用类型的函数。相反,您可以做的是使用通用签名定义类型。然后创建一个采用该通用签名的特定实例的函数。像这样:

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

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

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

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

打字稿错误“无法将类型参数分配给类型参数”

将函数分配给变量

是否可以将通用函数分配给变量?

将具有通用参数的函数分配给变量

打字稿错误:无法将类型'number'的参数分配给'Expected <Promise <number >>'类型的参数

具有Typescript的CombineReducers返回错误“类型的参数无法分配给类型为'ReducersMapObject'的参数”

无法将类型'MemoizedSelector <ICommonAppState,IMenuItemsObject []>'的参数分配给类型'string'的参数

rxjs6分区方法:无法将类型“ UnaryFunction”的参数分配给类型“ OperatorFunction”的参数

使用TypeScript将箭头函数分配给通用函数类型

无法将字符串类型的参数分配给paramMap

无法将类型“未知”的参数分配给类型“ {}”的参数

Firebase:getIdToken()的结果导致错误:无法将类型'Promise'的参数分配给类型'string'的参数

React useState hooks错误:无法将类型“ xxx”的参数分配给类型“ SetStateAction <xx>”的参数

无法将类型“未知”的参数分配给类型“字符串”的参数

无法将类型“ ApolloServer”的参数分配给类型“ ApolloServerBase”的参数

修复TS2345:无法将类型“ HTMLElement”的参数分配给类型“ HTMLInputElement”的参数

Typescript:具有枚举类型参数的函数分配给带有字符串参数类型的回调

无法将类型为'HttpEvent <any>'的角形参数分配给该参数

React Component上的打字稿错误:无法将'Element'类型的参数分配给该类型的参数

使用Jest无法将类型“ openURL”的参数分配给类型“从不”的参数

无法将返回的函数分配给主变量

将函数参数分配给列名

将函数参数分配给变量时,PHP无法正常工作

将参数函数分配给类成员

如何将具有可变数量参数的函数分配给单个变量?

无法将参数类型“String”分配给 firebase 函数上的参数类型“Uri”

Flutter - 不能将函数类型的参数分配给“void function()”类型的参数

无法将参数类型“ ”分配给参数类型列表 <>

无法将参数类型“字符串”分配给参数类型“对象?函数(对象?,对象?)?