moment-timezone
的一个问题是如果多次包含它会给你一个警告。我有一个需要时区的模块。因为我不知道使用者是否会自行设置时区,我有以下内容:
if (moment.tz === undefined) {
require('moment-timezone');
moment.tz.setDefault('America/Los_Angeles');
}
这在普通的Javascript中工作正常。我最近正在尝试切换到Typscript,当我这样做时,我收到错误Cannot find name 'require'
。
我将该行切换为import momentTimezone = require('moment-timezone');
,然后获取An import declaration can only be used in a namespace or module.
我该怎么办?
答案 0 :(得分:0)
import foo = require ('foo')
是特定于打字稿的。它做两件事,将类型定义导入声明空间,将实际模块导入变量空间。如果您在任何时候都不使用导入的模块并且仅将其用于打字,那么它将在运行时被删除。但是如果你在变量名称空间上使用它,EJ调用一个方法或将它分配给一个变量,那么你将得到一个运行时导入。知道这一点非常重要,因为它会让你感到惊讶。
如果要导入和使用类型定义并且仅在满足某些条件时导入实际模块,则必须将typescript的导入与常规需求组合,如下所示:
import foo = require('foo');
export function loadFoo() {
// This is lazy loading `foo` and using the original module *only* as a type annotation
var _foo: typeof foo = require('foo');
// Now use `_foo` as a variable instead of `foo`.
}