Typescript返回值或curried函数

Bra*_*ier 0 javascript currying typescript

鉴于以下Typescript代码,我收到一个错误

TS2349: Cannot invoke an expression whose type lacks a call signature. Type 'AddReturnType' has no compatible call signatures.

为什么不能AddReturnType使用该呼叫?

type AddReturnType = number | ((arg0: number) => number);
function add(x: number, y?: number) : AddReturnType {
    if (!y) {
        return (val) => val + y;
    }
    return x + y;
}

add(1)(2);
Run Code Online (Sandbox Code Playgroud)

jon*_*rpe 5

TypeScript无法确定您是返回一个number函数还是函数,并且这两个选项中只有一个是可调用的.将两个功能签名分开:

function add(x: number): (number) => number;
function add(x: number, y: number): number;
function add(x, y?) {
    if (!y) {
        return (val) => val + y;
    }
    return x + y;
}

add(1)(2);
Run Code Online (Sandbox Code Playgroud)

那说,不应该val + x吗?