如何为打字稿中的此咖喱函数分配正确的类型签名?

时间:2018-11-11 08:46:37

标签: typescript functional-programming currying ramda.js

我是打字稿和泛型的新手,正在与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.

在打字稿中使用咖喱函数的正确方法是什么?

1 个答案:

答案 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);

(由于您没有给出hasLengthJustMaybe的定义,因此我无法自行测试。)如果那不是您要的内容,请澄清问题。