javascript - Typescript 返回值或柯里化(Currying)函数

标签 javascript typescript currying

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

TS2349:无法调用类型缺少调用签名的表达式。类型“AddReturnType”没有兼容的调用签名。

为什么 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);

最佳答案

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

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

也就是说,不应该是 val + x 吗?

关于javascript - Typescript 返回值或柯里化(Currying)函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54426795/

相关文章:

Javascript Canvas 边缘检测

javascript - 使用 Jest 假计时器进行所有测试

typescript - NestJs:为什么 monorepo 模式只打包根应用程序,

scala - 与下划线一起使用时,部分函数应用程序过早地运行代码块

javascript - 在 Node.js 中嵌套 promise 的情况下 promise 解决/拒绝

javascript - 在 JavaScript 中获取字节数组的 SHA1 校验和?

typescript 等同于 C# 的默认 <T>?

javascript - typescript Await 在回调中不起作用

haskell - 对参数进行排序以利用柯里化(Currying)

function - scala隐式类方法类型不匹配在reduce与函数currying的非隐式方法中