繁体   English   中英

如何在 typescript 中定义串联 function

[英]How to define a concatenation function in typescript

在 Typescript 如何定义一个可以支持连接的接口计算器? 喜欢:

interface Calculator {
    ...
}
 
let calcu: Calculator;
calcu(2).multiply(5).add(1)

我试过了:

interface Calculator {
  (num: number): Calculator;
  multiply(num: number): Calculator;
  add(num: number): Calculator;
}

但是我得到了 calcu 没有实例化的错误:

Variable 'calcu' is used before being assigned

所以我的问题是如何定义接口 Calculator 以及如何实例化 calcu。

接口只是定义了一些东西的形状,你可能应该声明一个可以用new实例化的class

例如

class Calculator
{
    constructor(public num: number) { }
    multiply(num: number)
    {
        this.num *= num;

        return this;
    }
    add(num: number)
    {
        this.num += num;

        return this;
    }
}

const calcu = new Calculator(2);
calcu.multiply(5).add(1);

console.log(calcu.num);

如果您想直接使用界面和普通对象,那是可能的,但会很痛苦,例如:

const calcu: Calculator = (() =>
{
    let value;

    const fun = function (num: number)
    {
        value = num;

        return fun;
    };
    fun['multiply'] = (num: number) =>
    {
        value *= num;
        return fun;
    };
    fun['add'] = (num: number) =>
    {
        value += num;
        return fun;
    };

    return fun;
})();

calcu(2).multiply(5).add(1);

(您可能还想定义一个返回内部值的 function,目前它是完全隐藏的。)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM