Как проверить, относится ли obj к типу luxon?

Я пишу адаптер даты для Angular Material, и мне нужна функция, которая возвращает логическое значение, если предоставленный объект является luxon DateTime.

Что-то вроде этого (с момента):

isDateInstance(obj: any): boolean {
    return moment.isMoment(obj);
  }

То, что у меня есть, это до сих пор - это достаточно хорошо?:

isDateInstance(obj: any): boolean {
      try {
          const luxonObject = DateTime.fromObject(obj);
          return luxonObject.isValid;
      } catch (error) {
          return false;
      }
  }

person DauleDK    schedule 15.05.2018    source источник


Ответы (1)


Я думаю, что ваш код в порядке, я бы посоветовал вам использовать собственный instanceof.

const DateTime = luxon.DateTime;

function isDateInstance(obj) {
    return obj instanceof DateTime;
}

console.log( isDateInstance('') );
console.log( isDateInstance({}) );
console.log( isDateInstance(new Date()) );
console.log( isDateInstance(DateTime.local()) );
<script src="https://moment.github.io/luxon/global/luxon.min.js"></script>

ИЗМЕНИТЬ:

Luxon добавил isDateTime метод в v.1.6.0, который

Проверьте, является ли объект DateTime. Работает вне границ контекста

поэтому обновленное решение может быть следующим:

С v.1.6.0 по v.1.8.3 isDateTime будет давать undefined вместо false из-за проблемы.

person VincenzoC    schedule 17.05.2018