给定一般类型:
export interface Mappable<Type, Src> {
map: <T = Type, D = Src>(f: (a: Src) => D) => T;
}
export type ComposeMapper<T extends Mappable<A, B>, A, B> = (f: (a: B) => B, m: T) => T;
为什么我不能在这样的声明中使用它:
// Error: '(' expected
let _cm: <T extends Mappable> ComposeMapper<T>(f, m) => T;
但是我可以内联类型来声明它:
const _cm: <T extends Mappable<A ,B>, A, B>(f: (a: B) => B, m: T) => T = (f, m) => m.map(f);
类型签名中的泛型类型是否恰好位于参数列表旁边,并且不能应用于其他类型?
答案 0 :(得分:1)
您有问题的声明看起来像是在尝试创建generic variable,但TypeScript(从v2.5开始)没有这些声明。 TypeScript具有通用的类型,这是ComposeMapper<T>
的内容,它具有通用的函数,这是您的上一个_cm
声明。
Mappable
是一个具有泛型函数map()
的接口,它返回T
调用者指定的任何类型map()
?如何实施?你想要的通用变量似乎返回值 T
,它只是一个类型,所以无论如何这将是一个语法错误。在最后一行,您致电m.map(f)
,其中m
为T
并返回T
?你会如何实现?我很困惑,我希望你也是。我唯一的建议是让你充实你正在尝试做的事情,并且可以在没有类型的JavaScript中实现它,然后看看你是否可以使用TypeScript来注释它。或者,可能花更多时间阅读the generics section of the handbook?不确定。
无论如何,希望有所帮助;祝你好运!