javascript - 如何使用接口在打字稿中添加两个数字
问题描述
在这里,我尝试使用打字稿接口和箭头函数概念添加两个数字。当我运行编译的 js 代码时,它正在调用 add() 方法并显示 NaN。
下面是 ts 代码:- var add = (Num) => console.log(Num.num1 + Num.num2) ;
interface Num {
num1: number;
num2: number;
}
this.add(1,2);
下面是js代码:-
var add = function (Num) { return console.log(Num.num1 + Num.num2); };
this.add(1, 2);
提前致谢
解决方案
根本原因:没有类型注释
虽然其他答案解决了症状,但我不相信他们已经解决了代码中的潜在问题,代码如下:
var add = function (Num) { return console.log(Num.num1 + Num.num2); };
这里的参数被调用 Num
,并且没有类型。我相信你的意图是:
// name: type
const add = function (num: Num) { return console.log(num.num1 + num.num2); };
调用添加
您的代码不在特定的上下文中,所以让我们停下this
来看看对add
函数的调用:
// ERROR: Expected 1 arguments, but got 2.
// const add: (num: Num) => void
add(1, 2);
TypeScript 现在可以帮助您查看调用中的错误。在不解决根本原因的情况下解决呼叫add
解决了症状,但没有解决根本问题。
您现在可以更新您的呼叫以添加:
add({ num1: 1, num2: 2 });
它会起作用——但所有未来的电话也会如此;因为你的add
函数现在有了类型信息。
演示
将以下内容拖放到 TypeScript 文件或 TypeScript Playground 中,以查看实际情况:
interface Num {
num1: number;
num2: number;
}
const add = function (num: Num) { return console.log(num.num1 + num.num2); };
add(1, 2);
add({ num1: 1, num2: 2 });
添加(1, 2)
如果您想要一个允许签名的添加方法,add(1, 2)
您需要更改签名......完全注释的函数本身可以描述为:
const add = function (a: number, b: number): number {
return a + b
};
如果您想查看此界面的外观,如下所示:
interface Adder {
(num1: number, num2: number): number;
}
const add: Adder = function (a, b) {
return a + b;
};
超级添加
如果你想让你的add
函数处理更多的数字,你可以使用一个休息参数......像这样:
const add = function (...numbers: number[]) {
if (!numbers || !numbers.length) {
return 0;
}
return numbers
.reduce(function (acc, val) {
return acc + val;
});
};
console.log(add());
console.log(add(1, 2));
console.log(add(1, 2, 3, 4));
这将处理任意数量的参数。
推荐阅读
- c - C 用户定义函数问题
- java - IDEA Ultimate 2019.3 上的 org.springframework.boot.web.embedded.tomcat.ConnectorStartFailedException
- docker - 在 docker 上部署 Redis 以进行生产的最佳选择是什么?
- javascript - Testcafe:.includes() 在 if/else 语句中使用时不是函数
- python-3.x - 用 Python 中的参考数据帧中的值替换缺失的数据帧
- python - 我无法访问另一个类中的变量
- c# - 复制的样式为空。改用 StyleNotFound
- twitter-bootstrap - 使用 Bootstrap 4 Flexbox 居中导航项目
- playback - 私有 Android 应用程序未显示在托管 Android Google Play 中
- r - 为什么 dnorm() 不返回我在执行 sd(dnorm()) 时输入的标准差?