Как проверить, что объект 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;
      }
  }

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>

РЕДАКТИРОВАТЬ:

Люксон добавил isDateTimeметод вv.1.6.0тот

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

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

const DateTime = luxon.DateTime;

function isDateInstance(obj) {
    return DateTime.isDateTime(obj);
}

console.log( isDateInstance('') );
console.log( isDateInstance({}) );
console.log( isDateInstance(new Date()) );
console.log( isDateInstance(DateTime.local()) );
<script src="https://cdn.jsdelivr.net/npm/luxon@1.8.2/build/global/luxon.js"></script>

Как вы можете видеть из фрагмента (с v.1.8.2), ты получишь undefined вместо false,

Другие вопросы по тегам