我是打字稿和泛型的新手,正在与Maybe monad合作。我已经使用Ramda创建了这个小的实用函数:
const fromEmpty = R.ifElse(hasLength, Just, Maybe.zero);
我可以从中得出的最接近的签名是:
type EmptyFunc<T> = (val: T[]) => Maybe<T[]>;
这是一个函数,它接收一个数组并返回一个函数,该函数返回该数组的Maybe。
我尝试做
const fromEmpty(<U extends EmptyFunc<U>) = R.ifElse(hasLength, Just, Maybe.zero);
但这不起作用。它返回error TS1005: ',' expected.
在打字稿中使用咖喱函数的正确方法是什么?
答案 0 :(得分:1)
声明
type EmptyFunc<T> = (val: T[]) => Maybe<T[]>;
声明了一系列不同的功能类型EmptyFunc<number>
,EmptyFunc<string>
等,每种类型仅适用于指定的类型T
。你可能是说
type EmptyFunc = <T>(val: T[]) => Maybe<T[]>;
声明了一个通用函数的类型EmptyFunc
,该函数对所有类型T
都有效。然后将此类型应用于fromEmpty
,只需输入:
const fromEmpty: EmptyFunc = R.ifElse(hasLength, Just, Maybe.zero);
(由于您没有给出hasLength
,Just
和Maybe
的定义,因此我无法自行测试。)如果那不是您要的内容,请澄清问题。