【发布时间】:2019-04-10 11:00:56
【问题描述】:
我已经编写了这个简单的 compose 函数,它工作得很好。然而,为了确保类型安全,我不得不求助于使用泛型为编译器提供类型提示,即使很容易推断出“upperCaseAndLog”的签名。
const compose = <T, R>(...fns: Array<(a: any) => any>) => (a: T): R =>
fns.reduce((b, f) => f(b), a);
const greet = (s: string) => "Hello " + s;
const toUpperCase = (s: string) => s.toUpperCase();
const log = console.log;
const upperCaseAndLog = compose<string, void>(
greet,
toUpperCase,
log
);
upperCaseAndLog("bill");
我是否遗漏了什么,是否有更优雅的方式来实现相同的目标?我假设像 F# 或 Haskell 这样的语言无需任何额外信息就能推断出类型。
【问题讨论】:
-
编译器无法推断您的类型,因为它们没有出现在参数中。您希望它如何分辨?
-
输入变量。
标签: javascript typescript types functional-programming type-inference