在TypeScript语言中有方法重载吗?
class TestClass {
someMethod(stringParameter: string): void {
alert("Variant #1: stringParameter = " + stringParameter);
}
someMethod(numberParameter: number, stringParameter: string): void {
alert("Variant #2: numberParameter = " + numberParameter + ", stringParameter = " + stringParameter);
}
}
var testClass = new TestClass();
testClass.someMethod("string for v#1");
testClass.someMethod(12345, "string for v#2");
class TestClass {
private someMethod_Overload_string(stringParameter: string): void {
// A lot of code could be here... I don't want to mix it with switch or if statement in general function
alert("Variant #1: stringParameter = " + stringParameter);
}
private someMethod_Overload_number_string(numberParameter: number, stringParameter: string): void {
alert("Variant #2: numberParameter = " + numberParameter + ", stringParameter = " + stringParameter);
}
private someMethod_Overload_string_number(stringParameter: string, numberParameter: number): void {
alert("Variant #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; // Unreachable area for this case, unnecessary return statement
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; // Unreachable area for this case, unnecessary return statement
}
}
}
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确实支持方法重载,但它相当笨拙,包括大量检查参数类型的手工工作。我认为这主要是因为在普通JavaScript中,最接近方法重载的方法也包括检查,而TypeScript试图不修改实际的方法体,以避免任何不必要的运行时性能成本。
如果我理解正确的话,您必须首先为每个重载编写一个方法声明,然后编写一个方法实现,检查其参数以决定调用了哪个重载。实现的签名必须与所有重载兼容。
class TestClass {
someMethod(stringParameter: string): void;
someMethod(numberParameter: number, stringParameter: string): void;
someMethod(stringOrNumberParameter: any, stringParameter?: string): void {
if (stringOrNumberParameter && typeof stringOrNumberParameter == "number")
alert("Variant #2: numberParameter = " + stringOrNumberParameter + ", stringParameter = " + stringParameter);
else
alert("Variant #1: stringParameter = " + stringOrNumberParameter);
}
}
问题内容: 有没有办法用TypeScript语言进行方法重载? 我想实现以下目标: 这是我不想做的一个例子(我真的很讨厌JS中重载hack的那一部分): 问题答案: 根据规范,TypeScript确实支持方法重载,但是它很笨拙,并且包含许多手动检查参数类型的工作。我认为这主要是因为在纯JavaScript中最接近方法重载的地方还包括检查,并且TypeScript尝试不修改实际的方法主体,以避免任何
注意:参数的类型可以是完全不同的类型,与本例不同。
我正在尝试使用Typescript重载一个方法。Java或C#中通常的重载方式似乎不适用于Typescript。我不能这样做: 我四处搜索,发现我必须这样做: 对我来说,这个方法似乎很不整洁,很难维护,因为我把所有东西都乱七八糟地放在一个方法中,并使用if/ther语句来划分逻辑。 有没有更好的方法可以在Typescript中进行方法重载?
本文向大家介绍在Java中使用方法重载,包括了在Java中使用方法重载的使用技巧和注意事项,需要的朋友参考一下 一个类可以有多个具有相同名称的方法,但方法的参数列表不应相同。这称为方法重载。方法重载有点类似于构造函数重载。 演示此的程序如下所示- 示例 输出结果 现在让我们了解上面的程序。 在方法重载的实现中,使用三种方法创建PrintValues类。其中一个采用int类型的参数,另一个采用dou
该方法需要检查两个或三个点是否相互垂直/水平。在三个点的情况下,它只需要检查最后两个点是否与起始点水平/垂直。 有人知道我如何把所有的东西都放到一个方法里吗?