使用默认参数进行打字稿柯里化

Jyo*_*aja 3 currying typescript

为什么 Typescript 中的柯里化函数不能有默认参数。

考虑以下示例:

function add(a: number): (b: number, c:number = 0) => number {
                                     ^^^^^^^^^^^^
    return function(b: number, c: number = 0): number {
        return a + b + c;
    }
} 

add(10)(5); //I want to call like this
Run Code Online (Sandbox Code Playgroud)

下划线部分为错误部分。

参数初始值设定项仅允许在函数或构造函数实现中使用。

这就是 linter 所说的。如果是这种情况,有什么办法可以让柯里化函数具有默认参数吗?

Jac*_*und 5

要记住的重要一点是,当您声明函数时add(b: number, c:number = 0) => number返回类型 - 您是在告诉编译器什么类型的函数可以作为返回值。默认值不是类型的一部分,而是实现的一部分。

然而,使参数可选是类型的一部分,因此这是有效的:

function add(a: number): (b: number, c?: number) => number {
    return function(b: number, c: number = 0): number {
        return a + b + c;
    };
}
Run Code Online (Sandbox Code Playgroud)