Typescript 与多种类型的接口
我有一个Typescript 与多种类型的接口,typescript,Typescript,我有一个接口属性: LegalReviewDate?: string | Date; 上载到SharePoint列表时,它需要是日期对象。我知道在提交之前它将是一个字符串,所以我尝试以下方法: contract.LegalReviewDate = new Date(contract.LegalReviewDate); 但这会引发错误,因为它不是字符串或数字(函数认为它可能是无效的日期) 有没有办法告诉函数“new Date”(新日期)它是一个字符串?有很多方法可以做到这一点 如果您完全确定在
接口
属性:
LegalReviewDate?: string | Date;
上载到SharePoint列表时,它需要是日期
对象。我知道在提交之前它将是一个字符串,所以我尝试以下方法:
contract.LegalReviewDate = new Date(contract.LegalReviewDate);
但这会引发错误,因为它不是字符串
或数字
(函数认为它可能是无效的日期)
有没有办法告诉函数“new Date”(新日期)它是一个字符串?有很多方法可以做到这一点
如果您完全确定在代码运行时,contract.LegalReviewDate
的值是一个日期格式正确的字符串(有关跨浏览器支持的格式的更多信息,请参阅),则可以使用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;
}
然后,创建一个新的contractedTo
,用于向SharePoint传递数据。新日期(contract.LegalReviewDate作为字符串)
?如果是字符串,可以使用类型保护并将其转换为日期。您如何知道它是字符串而不是日期
?您是否为其分配了字符串
?如果是这样的话,我们能看到代码吗?@jcalz在整个项目中除了uploadin之外,属性是一个字符串。我使用Office Fabric UIDatePicker
,它返回一个我转换为字符串的Date
。在上传时,我需要它是一个日期
。您可能应该使用两个属性而不是一个,或者两个对象,其中一个具有字符串
属性,另一个用于上传的对象具有日期
属性。对来回变化的不同类型重用相同的属性很难使类型安全。如果您想使用像as string
这样的断言来消除错误,这将是可行的,但我倾向于重构,因此这是不必要的。祝你好运