如何在TypeScript中进行方法重载?
如何在TypeScript中进行方法重载?
我想实现类似这样的效果:
class TestClass { someMethod(stringParameter: string): void { alert("变体 #1: stringParameter = " + stringParameter); } someMethod(numberParameter: number, stringParameter: string): void { alert("变体 #2: numberParameter = " + numberParameter + ", stringParameter = " + stringParameter); } } var testClass = new TestClass(); testClass.someMethod("string for v#1"); testClass.someMethod(12345, "string for v#2");
这是一个我不想做的例子(我真的讨厌在JS中的这种重载操作):
class TestClass { private someMethod_Overload_string(stringParameter: string): void { // 这里可以有很多代码...我不想把它和一般函数中的switch或if语句混在一起 alert("变体 #1: stringParameter = " + stringParameter); } private someMethod_Overload_number_string(numberParameter: number, stringParameter: string): void { alert("变体 #2: numberParameter = " + numberParameter + ", stringParameter = " + stringParameter); } private someMethod_Overload_string_number(stringParameter: string, numberParameter: number): void { alert("变体 #3: stringParameter = " + stringParameter + ", numberParameter = " + numberParameter); } public someMethod(stringParameter: string): void; public someMethod(numberParameter: number, stringParameter: string): void; public someMethod(stringParameter: string, numberParameter: number): void; public someMethod(): void { switch (arguments.length) { case 1: if(typeof arguments[0] == "string") { this.someMethod_Overload_string(arguments[0]); return; } return; // 对于这种情况来说,这是不可达的区域,是不必要的返回语句 case 2: if ((typeof arguments[0] == "number") && (typeof arguments[1] == "string")) { this.someMethod_Overload_number_string(arguments[0], arguments[1]); } else if ((typeof arguments[0] == "string") && (typeof arguments[1] == "number")) { this.someMethod_Overload_string_number(arguments[0], arguments[1]); } return; // 对于这种情况来说,这是不可达的区域,是不必要的返回语句 } } } var testClass = new TestClass(); testClass.someMethod("string for v#1"); testClass.someMethod(12345, "string for v#2"); testClass.someMethod("string for v#3", 54321);
如何在TypeScript语言中实现方法重载?