2015-10-01 163 views
1

我是新來的TypeScript和我在加載lodash時遇到問題。無法導入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'." 

當我刪除了進口指令它編譯完美,但_在運行時未定義。

我也試着把模塊內的導入沒有成功。

對不起,它一定是一個非常愚蠢的問題,但我無法弄清楚。

謝謝

編輯:

我明白這個問題。引用lodash的鍵入在範圍中創建了變量_。這就是爲什麼它沒有導入行編譯罰款。問題在於引用輸入不會真正導入lodash。這就是它在運行時失敗的原因。

當我導入lodash時,編譯失敗,因爲lodash已經在範圍內。

感謝您的支持。

+0

import語句需要引用模塊名稱。 'lodash'應該是''lodash''。 – thoughtrepo

+0

應該是:'var _ = require('lodash');'? –

+0

@thoughtrepo使用引號不會改變任何東西,但感謝您的評論。 –

回答

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");,但你不使用它,打字稿將刪除導入(我加了這個原因,doSoemthing方法)。

更新:爲什麼它不起作用?

問題是使用module關鍵字來聲明內部模塊。與此同時代碼加載了一個外部模塊。您應該避免混用內部和外部模塊。您可以在http://www.codebelt.com/typescript/typescript-internal-and-external-modules/瞭解更多關於內部和外部模塊的區別。

此外,如果您使用內部模塊,請避免使用module關鍵字,因爲它已過時,您應該使用namespace關鍵字代替。

+0

我嘗試了你的建議,但我得到了同樣的錯誤,甚至是一個新的:「錯誤TS2305:模塊'」lodash「'沒有導出成員'_'」 –

+0

我已更新我的答案請看一看。 –

+0

我的班上已經有東西了。我剛剛刪除它,使我的帖子更清晰 –