为什么 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,结果是:这在技术上是可行的,但会破坏设计目标。 感谢大家参与讨论。