为什么 TypeScript 中没有重载构造函数实现?
Why no overloaded constructor implementations in TypeScript?
在 TypeScript 中,只能重载构造函数类型签名,而不能重载实现。这背后有什么原因吗?我认为 Java 中的重载构造函数非常有用。例如,向量的定义可以是结束坐标、起点和终点或两个向量等等。
TypeScript 中当前的方法非常混乱。那么为什么打字稿没有呢?
是的,这是有原因的,原因是javascript不支持对方法或成员使用相同的名称。
考虑以下打字稿:
class MyClass {
myMethod() {}
myMethod(str: string) {}
}
编译版本为:
var MyClass = (function () {
function MyClass() {
}
MyClass.prototype.myMethod = function () { };
MyClass.prototype.myMethod = function (str) { };
return MyClass;
}());
如您所见,myMethod
的第二个实现正在替换第一个实现。
因此,您只能重载签名,然后您需要提供满足所有已声明签名的单一实现。
我提交了一份 issue,结果是:这在技术上是可行的,但会破坏设计目标。
感谢大家参与讨论。
在 TypeScript 中,只能重载构造函数类型签名,而不能重载实现。这背后有什么原因吗?我认为 Java 中的重载构造函数非常有用。例如,向量的定义可以是结束坐标、起点和终点或两个向量等等。 TypeScript 中当前的方法非常混乱。那么为什么打字稿没有呢?
是的,这是有原因的,原因是javascript不支持对方法或成员使用相同的名称。
考虑以下打字稿:
class MyClass {
myMethod() {}
myMethod(str: string) {}
}
编译版本为:
var MyClass = (function () {
function MyClass() {
}
MyClass.prototype.myMethod = function () { };
MyClass.prototype.myMethod = function (str) { };
return MyClass;
}());
如您所见,myMethod
的第二个实现正在替换第一个实现。
因此,您只能重载签名,然后您需要提供满足所有已声明签名的单一实现。
我提交了一份 issue,结果是:这在技术上是可行的,但会破坏设计目标。 感谢大家参与讨论。