Typescript 调用联合类型为“的新日期”;数字“字符串”;

Typescript 调用联合类型为“的新日期”;数字“字符串”;,typescript,Typescript,考虑以下代码段(另请参见): 但是,如果该构造函数不存在,例如,如果该场景发生在我自己的类中,该怎么办 有没有办法让它正常工作?或者这里的联合类型是一种设计气味,表明我的定义需要更改 我已经检查了,但是它没有关于联合类型的部分。我自己尝试过解决这个问题,但没有通过上面提到的技巧。我已经查看了关于SO的建议副本和类似问题,但到目前为止还没有找到答案。您可以扩展Date的构造函数接口来支持这一点;可能不是最好的解决方案,但似乎有效 interface DateConstructor { ne

考虑以下代码段(另请参见):

但是,如果该构造函数不存在,例如,如果该场景发生在我自己的类中,该怎么办

有没有办法让它正常工作?或者这里的联合类型是一种设计气味,表明我的定义需要更改


我已经检查了,但是它没有关于联合类型的部分。我自己尝试过解决这个问题,但没有通过上面提到的
技巧。我已经查看了关于SO的建议副本和类似问题,但到目前为止还没有找到答案。

您可以扩展Date的构造函数接口来支持这一点;可能不是最好的解决方案,但似乎有效

interface DateConstructor {
    new (value: number | string): Date;
}

var nr: number = 123456;
var str: string = "2015-01-01T12:00:00";
var both: string | number = "123456";

var myDate: Date;

myDate = new Date(nr);
myDate = new Date(str);
myDate = new Date(both); // <-- No more compile error
接口构造函数{
新建(值:数字|字符串):日期;
}
变量编号:编号=123456;
var str:string=“2015-01-01T12:00:00”;
变量均为:字符串| number=“123456”;
var myDate:日期;
myDate=新日期(nr);
myDate=新日期(str);

myDate=新日期(两者);// 这在Typescript github项目中已经讨论过

总而言之,在简单的情况下,如您所介绍的情况下,这项工作会很好,但在更复杂的情况下,它会分崩离析

本质上,重载集用于创建将参数1的类型与参数2的类型绑定在一起的信息(同样,也可以用于将其与返回类型绑定在一起)。使用联合类型时,信息丢失,并且允许参数类型的任何组合

他们的建议是制定编码标准,规定函数类型应该使用联合类型而不是重载

请参见#6735-我们已经讨论过,我们的计划是通过提供TS Lint规则和指导来缓解这一问题,即您永远不应该编写一系列重载,这些重载在联合类型中具有等效的表示形式

不知何故,将此工作作为签名重载解决方案的一部分实在太复杂了


这是非常好的信息,谢谢。我接受了另一个答案,因为这是我最终使用的解决方案(/解决方案),但这里也是+1@杰伦,这对我来说很有意义!虽然我认为我提供了有用/有趣的信息,但series0ne用一种方法直接回答了这个问题。谢谢你的投票:)
myDate = new Date(<any> both);
interface DateConstructor {
    new (value: number | string): Date;
}

var nr: number = 123456;
var str: string = "2015-01-01T12:00:00";
var both: string | number = "123456";

var myDate: Date;

myDate = new Date(nr);
myDate = new Date(str);
myDate = new Date(both); // <-- No more compile error