我的应用程序使用luxon。我有一些不确定的日期。我用luxon的isDateTime
验证我的日期,函数返回字符串。我在应用程序的多个地方使用了这个功能。我传递日期字符串的大多数地方,只有我得到undefined
日期的地方。我设法使Typescript错误静音,但我认为这不是最佳解决方案。
代码沙盒
有没有更好的方法,我可以做这个函数
const {
DateTime
} = require('luxon')
const ISO_DATE_FORMAT = "yyyy-MM-dd";
const dateToStrings = (date: string | number | Date): DateTime =>
DateTime.fromISO(new Date(date).toISOString());
const dateToISOString = (date: Date | string | undefined): string => {
if (DateTime.isDateTime(date)) {
return dateToStrings(date).toFormat(ISO_DATE_FORMAT);
}
return date as string;
};
console.log(dateToISOString(undefined));
在这种情况下dateToISOString(undefined)
,您只需告诉typescriptundefined
是一个字符串,这将在调用方尝试访问字符串值时导致异常。
相反,您应该显式地处理undefined
案例,并且(取决于您的用例(您可能想要:
- 返回默认文本:例如&""-&";,等等
- 或抛出错误:例如
throw Error('undefined date!');
export const dateToISOString = (date: Date | string | undefined): string => {
if (!date) {
/**
* handle the case when the caller passes undefined explicitly.
* Dependent on your use-case you may want to
* - return a default text: e.g. "", "-", etc.
* - or throw Error('undefined date!');
*/
return '-';
} else if (typeof date === "string") {
// then check if the input is a string
return date;
} else {
/**
* now typescript knows that the input is of type Date
* because you defined the input type as: Date | string | undefined
* and you have already handled the undefined and string cases
*/
return dateToStrings(date).toFormat(ISO_DATE_FORMAT);
}
};