打字稿 - 有条件的要求

时间:2016-12-23 08:01:21

标签: javascript typescript

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.

我该怎么办?

1 个答案:

答案 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`.
}