Follow

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use
Contact

Typescript undefined date validation

I am using luxon for my app. I have some undefined date. I validate my date with luxon‘s isDateTime and function returns string. I used this function multiple places of the app. Most of the places I am passing date string and only places I am getting undefined date. I manage to silent the Typescript error but I think it’s not optimal solution.

code-sandbox
Is there any better way, I can make this function?
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));

>Solution :

MEDevel.com: Open-source for Healthcare and Education

Collecting and validating open-source software for healthcare, education, enterprise, development, medical imaging, medical records, and digital pathology.

Visit Medevel

In this case dateToISOString(undefined), you simply tell typescript that undefined is a string, which will later cause exceptions when the caller tries to access the string-value.

Instead you should handle the undefined case explicitly and (dependent on your use-case) you may want to:

  • return a default text: e.g. "", "-", etc.
  • or throw an error: e.g. 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);
  }
};
Add a comment

Leave a Reply

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use

Discover more from Dev solutions

Subscribe now to keep reading and get access to the full archive.

Continue reading