gpt4 book ai didi

javascript - 如何进行 typescript 功能链接?

转载 作者:搜寻专家 更新时间:2023-10-30 21:03:59 26 4
gpt4 key购买 nike

我想在 typescript 中使用函数链。

考虑一个类

export class numbOp(){
private n;
constructor(int num){
this.n = num;
}

public add(inc = 1){
this.n = this.n + inc;
}

}

我如何使用它作为(1)

let finalNumber = new numbOp(3);
console.log(finalNumber) // Output: 3

我如何使用它作为(2)

let finalNumber = new numbOp(3).add();
console.log(finalNumber) // Output: 4

我如何将它用作(3)

let finalNumber = new numbOp(3).add().add();
console.log(finalNumber) // Output: 5

我如何使用它作为(4)

let finalNumber = new numbOp(3).add().add(2).toString();
console.log(finalNumber) // Output: "6"

Please, help me out to achieve this. Thanks in advance :)

最佳答案

你只需要从你想要链接的函数中返回this

class numbOp {
private n: number;
constructor(num: number) {
this.n = num;
}

public add(inc = 1) : this { // annotation not necessary added to address comments
this.n = this.n + inc;
return this;
}
toString() {
return this.n;
}

}
let finalNumber = new numbOp(3);
console.log(finalNumber + "") // Output: 3
//How do I use it as (2)
let finalNumber2 = new numbOp(3).add();
console.log(finalNumber2 + "") // Output: 4
//How do I use it as (3)
let finalNumber3 = new numbOp(3).add().add();
console.log(finalNumber3 + "") // Output: 5
//How do I use it as (4)
let finalNumber4 = new numbOp(3).add().add(2).toString();
console.log(finalNumber4) // Output: "6"

编辑

因为 console.log 部分似乎比评论中的链部分更有趣,我将添加一些方法来确保控制台中的输出是一个数字:

  1. 覆盖toString并使用字符串强制转换来获取对象的字符串表示
  2. 要求在显示之前调用终止方法(即不要忘记在完成链时调用 toString)
  3. 覆盖 valueOf 并使用一元 + 运算符(这也将使您的类可用于二进制操作

最后一个选项的代码:

class numbOp {
private n: number;
constructor(num: number) {
this.n = num;
}

public add(inc = 1) : this { // annotation not necessary added to address comments
this.n = this.n + inc;
return this;
}
valueOf() {
return this.n;
}

}
let finalNumber2 = new numbOp(3).add();
console.log(+finalNumber2) // Output: 4
console.log(1 + (+finalNumber2)) // Output: 5
console.log(1+(finalNumber2 as any as number)) // Output: 5

关于javascript - 如何进行 typescript 功能链接?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53974187/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com