這裏的一個簡單問題是如何使用命名空間打字稿類作爲用於節點的外部模塊。這個問題的答案似乎是如何使用現有的打字稿命名空間類作爲nodejs的外部模塊
它不能做,不要嘗試,不要使用命名空間
我在,我們有一個大的代碼庫的位置那麼這都是用命名空間編寫的,我們現在也試圖在node.js中使用這些代碼。
我想弄清楚如何使用我們現有的代碼。
我已經得到儘可能編譯我的命名空間代碼,這樣產生一個js
文件和一個d.ts
每個ts
文件CommonJS的nodelibs文件夾。
我有以下內容添加到我的每一個TS文件,我想提供給節點:
var entities = require("../nodelibs/entities/entities");
var myThing = new entities.SomeClass();
儘管:
namespace Organisation.Project.Entities{
export class SomeThing{
}
}
var module: {copy module definition from node.d.ts}
if(module)
{
module.exports = Organisation.Project.Entities;
}
我可以在節點的應用程序使用此代碼有entities.js
和entities.d.ts
在../nodelibs/entities/entities
沒有類型信息或編譯時檢查SomeClass
是一件事情。
我可以手動導入參考文件並手動鍵入類的實例,但在我的情況下SomeClass
是一個有很多靜態的類,所以我不能打出如何正確地輸入它......
var entities = require("../nodelibs/entities/entities");
var classRef = entities.SomeClass;
var myVar = classRef.staticProperty;
在這個例子中,因爲它不是SomeClass
一個實例,我不能爲SomeClass
鍵入classRef
,它是類的構造函數。 如何鍵入classRef以便我可以訪問類Some Class
上的靜態屬性?
感謝
也許用'import entities'而不是'var entities'? – Paleo
導入出現各種錯誤,找不到模塊或實體.js不是有效的模塊... – Roaders
在導入的文件'entities.ts'中,應該使用標準的靜態ES6語法:'export namespace Organisation.Project .Entities {/ * ... * /}'。之後,編譯器將能夠將其視爲有效的模塊。 – Paleo