我有一个interface
属性:
LegalReviewDate?: string | Date;
上载到SharePoint列表时,它必须是Date
对象。我知道在提交之前它将是一个字符串,所以我尝试这样做:
contract.LegalReviewDate = new Date(contract.LegalReviewDate);
但这会引发错误,因为它不是string
或number
(函数认为它可能是Date
无效)。
是否可以告诉函数new Date
它是一个字符串?
答案 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传递数据。