无法导入lodash

时间:2015-10-01 22:04:04

标签: node.js typescript lodash

我是TypeScript的新手,我在尝试加载lodash时遇到了问题。

这是我的代码:

///<reference path="../../typings/lodash/lodash.d.ts"/>    
///<reference path="../interfaces/IScheduler.ts"/>

import _ = require('lodash');

module MyModule {

  export class LeastUsedScheduler implements IScheduler {
     /// CODE HERE
  }
}

我尝试用以下方式替换导入行:

import * as _ from lodash;

在这两种情况下,我得到了:

"error| Cannot find name 'IScheduler'."

当我删除import指令时,它完全编译,但_在运行时未定义。

我还尝试将导入放在模块中但没有成功。

对不起这一定是一个非常愚蠢的问题,但我无法弄清楚。

谢谢

编辑:

我明白了这个问题。引用lodash的类型创建了范围中的变量_。这就是为什么没有输入线就能编好的原因。问题是引用键入并不真正导入lodash。这就是它在运行时失败的原因。

当我导入lodash时,编译失败,因为lodash已经在范围内。

感谢您的支持。

1 个答案:

答案 0 :(得分:1)

我不是100%关于这个问题,但你可以尝试下面的内容并让我知道它是怎么回事吗?

///<reference path="../../typings/lodash/lodash.d.ts"/>
///<reference path="../interfaces/IScheduler.ts"/>

import _ = require("lodash");

export class LeastUsedScheduler implements IScheduler {
  doSomething(){
    _.each([],function name(parameter) {
        // ...
    });
  }
}

编译时看起来像:

var _ = require("lodash");
var LeastUsedScheduler = (function () {
    function LeastUsedScheduler() {
    }
    LeastUsedScheduler.prototype.doSomething = function () {
        _.each([], function name(parameter) {
            throw new Error("Not implemented yet");
        });
    };
    return LeastUsedScheduler;
})();
exports.LeastUsedScheduler = LeastUsedScheduler;

如果您导入模块import _ = require("lodash");但未使用它,TypeScript将删除导入(因此我添加了doSoemthing方法)。

更新:为什么它不起作用?

问题是module关键字用于声明内部模块。同时代码正在加载外部模块。您应该避免混合内部和外部模块。您可以在http://www.codebelt.com/typescript/typescript-internal-and-external-modules/了解有关内部和外部模块之间差异的更多信息。

此外,如果您使用内部模块,请避免使用module关键字,因为它已弃用,您应该使用namespace关键字。