Typescript未定义日期验证



我的应用程序使用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案例,并且(取决于您的用例(您可能想要:

  • 返回默认文本:例如&"&quot-&";,等等
  • 或抛出错误:例如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);
}
};

相关内容

  • 没有找到相关文章

最新更新