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。
解决方案
接口只是定义了一些东西的形状,你可能应该声明一个class
可以用new
.
例如
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);
(您可能还想定义一个返回内部值的函数,目前它是完全隐藏的。)
推荐阅读
- python - 被python -c 打印命令“\xef\xbe\xad\xde”弄糊涂了是什么意思?
- python - 从先前的函数调用中保留的函数参数中的默认值
- r - 我的置信区间输出不止一个观察值
- angular - 如果孩子扩展基类,则角度 ViewChild 未定义
- karate - 如何在空手道中添加条件等待响应?
- php - 如何让服务器访问 Google Calendar API?
- javascript - 使用模板文字的动态 Vue 组件导入路径
- dart - 颤振没有运行
- java - Android:选中一个复选框会检查同一行中的所有复选框
- reactjs - Redux Form - 使用动态字段名称初始化状态