我有一个问题归结为试图将具有特定参数类型的函数分配给期望具有泛型类型的函数的变量:
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] 删除。
我来说两句