【发布时间】:2015-04-10 11:52:16
【问题描述】:
我有多种类型要关联(外部)函数。我决定将它们放在幕后数组中,如下所示:
var labelGenerators : ILabelGenerator[] = []
ILabelGenerator 应该是类型可以具有的不同形状的通用接口,例如:
interface ILabelGenerator{
(container : SomeContainerObject, delta: IDeltaValues): string;
(container : SomeContainerObject, x: number, y: number): string;
(container : SomeContainerObject, x: Date, y: number): string;
}
现在,我不知道如何将项目添加到 labelGenerators 数组,因为如果我执行以下操作:
labelGenerators[0] = (container:SomeContainerObject, x:number, y: number) => {
return "label 0"; //the real code uses the parameters
}
我收到一个类型 (container:SomeContainerObject, x:number, y: number) => string is not assignable to type ILabelGenerator 错误。
如何解决这个问题? (我使用的是 TypeScript 1.3,但由于我有大约 10 种形状的调用,1.4 的联合类型将非常笨拙)
【问题讨论】:
-
如何使用
labelGenerators数组做一些有用的事情?不可能检查函数以知道应该使用哪个签名来调用它们。 -
这将在内部使用并有据可查(数组中的索引也来自枚举器)。所以
labelGenerators[LabelType.TimeStamp](为我提供了所有重载,开发人员能够在特定场景中选择“正确”的重载。如果我错过了所有的实现,我也会得到一个编译错误,这很好。
标签: interface typescript overloading