使用默认参数的打字稿

typescript currying with default parameters

为什么我们不能在 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

下划线部分为错误部分

A parameter initializer is only allowed in a function or constructor implementation.

这就是 linter 所说的。如果是这种情况,是否有任何方法可以在 curried 函数上使用默认参数?

要记住的重要一点是,当你声明函数 add 时,(b: number, c:number = 0) => number 是 return 类型——你是在告诉编译器什么样的函数是可接受的return 值。尽管默认值不是类型的一部分,但它们是实现的一部分。

然而,让参数可选是类型的一部分,所以这是有效的:

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