我试图理解为什么我们为调用签名和函数类型使用不同的语法。请考虑以下代码:
interface MyInterface {
// This is call signature
// It is used inside object type, function expression, function declaration, etc...
(x:number, y:number):number;
}
var myOne : MyInterface = (x,y) => x + y;
// vv this is function type
var myTwo : (x:number, y:number)=>number = (x,y) => x + y;
// function type is used in function type literal
在此代码中,myOne
和myTwo
变量实际上相同。它们(据我所见)是完全相同的类型,只是定义不同。
现在,当我们使用界面来定义它们时,我们使用调用签名,如下所示:
(x:number, y:number):number
当我们不使用界面时,我们使用函数类型文字:
(x:number, y:number)=>number
两者都表达相同的东西,参数的名称和类型以及返回类型的类型。我想知道,为什么我们需要两种不同但又相似的方法在打字稿中写同样的东西?
答案 0 :(得分:15)
它们完全一样。
为什么我们需要两种不同但又相似的方法来在typescript中编写相同的东西
(x:number, y:number)=>number
签名可用作property
注释:
interface MyInterface {
(x:number, y:string):string;
someProperty: (x:number, y:number)=>number;
}
与您的相似:
var myTwo : (x:number, y:number)=>number
只是详细:
的简写var myTwo : {(x:number, y:number):number}
所以你可以看到()=>
的简单性。
需要注意的一点是功能签名允许重载:
var myTwo : {
(x:number, y:number):number;
(x:number):string;
}
property
注释不支持哪种注释。