【发布时间】:2018-10-15 04:01:14
【问题描述】:
我有一个通用接口可供我使用:
CurriedFunction3<T1, T2, T3, R>: R
我想创建一个 const 绑定来填充其中一些类型参数。像这样的:
type CurriedSorter<T> = CurriedFunction3<(obj: T) => any, string, T[], T[]>;
但是,当我尝试分配 const 绑定此类型时,出现错误:
type CurriedSorter<T> = CurriedFunction3<(obj: T) => any, string, T[], T[]>;
const sortFactory: CurriedSorter = uncurryN(3, flip(compose(
unapply(sortWith),
uncurryN(2, ifElse(
compose(equals('DESC'), toUpper),
always(descend),
always(ascend),
)),
)));
通用类型
CurriedSorter需要 1 个类型参数。
const 绑定 sortFactory 应该是一个具有一个泛型类型参数的函数,可以这样使用:
sortFactory<MyType>(
prop('name'),
'DESC',
[{ name: 'foo' }, { name: 'bar' }]
) // returns `[{ name: 'bar' }, { name: 'foo' }]`
如何在 TypeScript 中通用地键入变量绑定?有什么办法可以用 TypeScript 做到这一点?
【问题讨论】:
-
sortFactory的类型是什么?您是否尝试在const sortFactory: CurriedSorter<T>中提及T? -
sortFactory应该是CurriedSorter<T>,即接受一种泛型类型传递给CurriedSorter。我不确定如何在const sortFactory中提及T,这就是这个问题的意义所在。当我做const sortFactory: CurriedSorter<T>时,我收到一个错误“找不到名称'T'”。
标签: javascript typescript ramda.js