2013-07-06 14 views
10

Jestem zaznajomiony ze słowem kluczowym export w TypeScript i dwoma kanonicznymi sposobami eksportu rzeczy z modułów Node przy użyciu TypeScript (oczywiście, można również użyć modułów TypeScript, ale są jeszcze bardziej od tego, co szukam):Eksportuj klasę jako moduł Node.js w TypeScript

export class ClassName { } 

i seria

export function functionName() { } 

jednak sposób, w jaki zwykle napisać moje modułów, dzięki czemu są one później importowane jako chwilowe zamknięć, jest:

var ClassName = function() { }; 
ClassName.prototype.functionName = function() { }; 
module.exports = ClassName; 

Czy jest sposób, w jaki mogę to zrobić za pomocą składni eksportu TypeScript?

Odpowiedz

16

Można to zrobić po prostu w maszynopisie 0.9.0:

class ClassName { 
    functionName() { } 
} 

export = ClassName; 
+0

Zdjąć 'export' z definicji klasy i działa idealnie. Dzięki :) – BraedenP

+0

@BraedenP tak, przepraszam, zapomniałem tego :) – basarat

+1

Cholera, dlaczego jestem taki głupi. Używałem modułów AMD z węzłem przez jakiś czas: facepalm: –

0

Oto jak wyeksportować CommonJS (node.js) Moduły z maszynopis:

src/ts/user/użytkownika .ts

export default class User { 
    constructor(private name: string = 'John Doe', 
       private age: number = 99) { 
    } 
} 

src/t/index.ts

import User from "./user/User"; 

export = { 
    user: { 
    User: User, 
    } 
} 

tsconfig.json

{ 
    "compilerOptions": { 
    "declaration": true, 
    "lib": ["ES6"], 
    "module": "CommonJS", 
    "moduleResolution": "node", 
    "noEmitOnError": true, 
    "noImplicitAny": true, 
    "noImplicitReturns": true, 
    "outDir": "dist/commonjs", 
    "removeComments": true, 
    "rootDir": "src/ts", 
    "sourceMap": true, 
    "target": "ES6" 
    }, 
    "exclude": [ 
    "bower_components", 
    "dist/commonjs", 
    "node_modules" 
    ] 
} 

dist/commonjs/index.js (Opracowano punkt wejścia modułu)

"use strict"; 
const User_1 = require("./user/User"); 
module.exports = { 
    user: { 
     User: User_1.default, 
    } 
}; 
//# sourceMappingURL=index.js.map 

dist/commonjs/użytkownika/user.js (Skompilowana klasa użytkownika)

"use strict"; 
Object.defineProperty(exports, "__esModule", { value: true }); 
class User { 
    constructor(name = 'John Doe', age = 72) { 
     this.name = name; 
     this.age = age; 
    } 
} 
exports.default = User; 
//# sourceMappingURL=User.js.map 

kod Testing (test.js)

const MyModule = require('./dist/commonjs/index'); 
const homer = new MyModule.user.User('Homer Simpson', 61); 
console.log(`${homer.name} is ${homer.age} years old.`); // "Homer Simpson is 61 years old." 
Powiązane problemy