对象类型中可以有多个调用签名:
interface MyInterface {
(x:number, y:number) : number
(s:string):void
}
这种语言并没有禁止这种情况,但这有用吗?是否可以构造该对象类型的(非空)表达式?
答案 0 :(得分:2)
这种语言并没有禁止这种情况,但这是有用的
用于建模许多 JavaScript库的工作原理。例如。考虑getter / setter定义:
interface GetSet {
(x:number) : void;
():number;
}
var getSet: GetSet;
getSet(123); // set
var config = getSet(); // get
是否可以构造该对象类型的<非空表达式
轻松:
interface GetSet {
(x:number) : void;
():number;
}
var getSet: GetSet;
getSet(123); // set
var config = getSet(); // get
// SAMPLE
function sampleGetSet(x:number): void;
function sampleGetSet(): number;
function sampleGetSet(x?:number){
if (x == void 0){
return 123; // getter
}
else {
var something = x; // setter
}
}
// Allowed as it matches the signature
getSet = sampleGetSet;
答案 1 :(得分:0)
如果没有真正了解具体案例,有点难以展示如何使用它的例子,但你可以这样:
interface MyInterface {
(x: number, y: number): number
(x: string): void
}
enum ActionType {
T1, T2
}
class SomeClass {
public handleSomething(action: ActionType, handler: MyInterface): boolean {
var result: boolean = false;
switch (action) {
case ActionType.T1:
result = handler(1, 2) > 5;
break;
case ActionType.T2:
handler('test');
result = true;
break;
}
return result;
}
}
在这种情况下,您的界面只是一个回调签名,允许您使用多个方法调用handler
。
我不确定你的意思是:&#39;构建该对象类型的表达式&#39;