javascript - 在 Typescript 中使用函数类型来限制函数定义
问题描述
根据文档https://www.typescriptlang.org/docs/handbook/interfaces.html#function-types
我想限制函数的参数。我已经这样写了我的函数....
interface FuncType {
(one: number, two: number, three: number): number;
}
let myfunc: FuncType = function (num1: number, num2: number, num3: number) {
return num1 + num2 + num3;
}
let result = myfunc(10,20,30);
console.log(result);
这很好用。但问题是,如果我这样做...
let myfunc: FuncType = function (num1: number, num2: number) { //num3 is missing
return num1 + num2;
}
// let result = myfunc(10,20); //this gives an error.
let result = myfunc(10,20,30); // I had to give three parameters
console.log(result);
这也有效。它没有显示任何错误。我期待它应该给出一个错误,因为函数定义中没有使用 num3 。
这也令人困惑,因为我不能用两个参数调用myfunc 。
是不是不能严格按照接口来做函数定义?
解决方案
那是因为 TypeScript 实际上允许丢弃参数。从他们的文档中:
您可能想知道为什么我们允许“丢弃”参数 [...]。允许这种赋值的原因是忽略额外的函数参数实际上在 JavaScript 中很常见。
在您的示例中,function (num1: number, num2: number)
是的子类型,function (one: number, two: number, three: number)
因此被认为是有效的。
推荐阅读
- processing - 我的中点算法有什么问题?
- vue.js - 为什么 $emit 只在第一次点击时发送数据
- asp.net - Blazor 的事件处理程序,带有来自 Razor Pages 的函数
- c++ - 如何将新项目的 Visual Studio 2019 社区版默认设置为 64 位模式?
- design-patterns - 中介者模式优势
- java - 如何刷新JTable的值?
- amazon-web-services - AWS ECS 服务不再启动任务
- freebsd - 如何使用freebsd内核安装网卡驱动
- java - volley.NoConnectionError
- javascript - 等待其他函数以构造函数结束