如何检查 obj 是否属于 luxon 类型?

Dau*_*eDK 5 luxon

我正在为 Angular Material 编写日期适配器,如果提供的对象是 luxon DateTime,则需要一个返回布尔值的函数。

像这样(从那一刻起):

isDateInstance(obj: any): boolean {
    return moment.isMoment(obj);
  }
Run Code Online (Sandbox Code Playgroud)

到目前为止,我所拥有的是 - 这是否足够好?:

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

Vin*_*zoC 9

我认为你的代码很好,我建议你可以使用 native 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()) );
Run Code Online (Sandbox Code Playgroud)
<script src="https://moment.github.io/luxon/global/luxon.min.js"></script>
Run Code Online (Sandbox Code Playgroud)

编辑:

Luxon 添加了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()) );
Run Code Online (Sandbox Code Playgroud)
<script src="https://cdn.jsdelivr.net/npm/luxon@1.10.0/build/global/luxon.js"></script>
Run Code Online (Sandbox Code Playgroud)

v.1.6.0直到v.1.8.3 isDateTime将给予undefined而不是false由于问题