[英]How to use Existing typescript namespaced classes as external modules for nodejs
這里一個簡單的問題是如何使用命名空間的打字稿類作為外部模塊供節點使用。 答案似乎是
它無法完成,請勿嘗試,請勿使用名稱空間
好吧,我的位置是,我們有一個大型的代碼庫,所有代碼庫都是用命名空間編寫的,我們現在也嘗試在node.js中使用此代碼。
我試圖弄清楚如何使用我們現有的代碼。
我已經將我的命名空間代碼編譯到一個commonjs nodelibs文件夾中,該文件夾生成一個js
文件和每個ts
文件一個d.ts
我必須將以下內容添加到我想對節點可用的每個ts文件中:
namespace Organisation.Project.Entities{
export class SomeThing{
}
}
var module: {copy module definition from node.d.ts}
if(module)
{
module.exports = Organisation.Project.Entities;
}
我可以在節點應用程序中使用以下代碼:
var entities = require("../nodelibs/entities/entities");
var myThing = new entities.SomeClass();
盡管存在既是entities.js
和entities.d.ts
在../nodelibs/entities/entities
沒有類型信息或編譯時檢查SomeClass
是一個東西。
我可以手動導入引用文件並手動鍵入該類的實例,但是在我的情況下, SomeClass
是一個上面有很多靜電的類,因此我無法確定如何正確鍵入它。
var entities = require("../nodelibs/entities/entities");
var classRef = entities.SomeClass;
var myVar = classRef.staticProperty;
在此示例中,我不能將classRef
為SomeClass
因為它不是SomeClass
的實例,而是類構造函數。 如何鍵入classRef,以便可以訪問類Some Class
上的靜態屬性?
謝謝
在模塊中,使用靜態ES6模塊語法 :
// File entities.ts
export namespace Organisation.Project.Entities {
export class SomeClass {
public static abc = 'abc';
}
}
然后,導入您的名稱空間:
// File main.ts
import {Organisation} from './entities';
type classRef = Organisation.Project.Entities.SomeClass;
var myVar = classRef.abc;
說編譯器以CommonJS格式生成模塊:
// File tsconfig.json
{
"compilerOptions": {
"module": "commonjs"
},
"exclude": [
"node_modules"
]
}
在瀏覽器中,您可以使用捆綁器或裝載器。 有一些配置要做。
捆綁包:
裝載機:
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.