多种类型的接口

时间:2019-10-08 14:29:45

标签: typescript

我有一个interface属性:

LegalReviewDate?: string | Date;

上载到SharePoint列表时,它必须是Date对象。我知道在提交之前它将是一个字符串,所以我尝试这样做:

contract.LegalReviewDate = new Date(contract.LegalReviewDate);

但这会引发错误,因为它不是stringnumber(函数认为它可能是Date无效)。

是否可以告诉函数new Date它是一个字符串?

1 个答案:

答案 0 :(得分:0)

您可以通过多种方式进行此操作。

如果您完全确定在代码运行时,contract.LegalReviewDate的值是一个字符串,其日期格式正确(有关跨浏览器支持的格式的更多信息,请参见this answer by CMS to Why does Date.parse give incorrect results?),您可以使用as运算符告诉TypeScript您对其有效性很有信心:

contract.LegalReviewDate = new Date(contract.LegalReviewDate as string);

您还可以使用类型保护来确保您的假设正确:

if (typeof contract.LegalReviewDate === 'string') {
    contract.LegalReviewDate = new Date(contract.LegalReviewDate as string);
}
if (typeof contract.LegalReviewDate === 'object' && contract.LegalReviewDate instanceof Date) {
    contract.LegalReviewDate = contract.LegalReviewDate as Date;
    // OR contract.LegalReviewDate = new Date(contract.LegalReviewDate.valueOf());
}

或者如@jcalz所述,使用两个单独的属性或对象。例如,

interface Contract {
    LegalReviewDate?: string;
}

interface ContractDTO {
    LegalReviewDate?: Date;
}

然后,创建一个新的ContractDTO,用于将数据传递到SharePoint和从SharePoint传递数据。