1

我正在使用 angular(2) 和打字稿。我正在使用 moment 库来转换日期,所以我在我的一个实用程序类中有这个函数:

static isoStringToDateObj(isoDateString: string): Date {
    // For unit tests and any environment where moment library is not present
    if (!moment) {
        return new Date(isoDateString);
    }
    return moment(isoDateString).toDate();
}

这在浏览器中工作正常,但是当我尝试运行我的单元测试时,它会抛出错误:ReferenceError: Can't find variable: moment in karma-test-shim.js (line 16240)

它所指的线就是if (!moment)线。

  1. 为什么它关心变量是否存在于仅检查变量是否存在的语句中?它没有引用任何属性。
  2. declare var moment: any;在文件的顶部有函数 isoStringToDateObj 所在,那么为什么在实际声明变量时会说引用错误?
4

1 回答 1

2

检查全局变量是否不存在的唯一正确方法是:

if (typeof moment === 'undefined') { ... }

ReferenceError:找不到变量:时刻

是运行时错误,declare var moment: any欺骗打字系统对此保持沉默,但不会moment以任何方式影响实际的全局。

于 2017-07-05T21:17:04.667 回答