node.js - Typescript internt modul på tvers av flere filer i Nodejs
Jeg har gått gjennom StackOverflow-innlegg og flere blogginnlegg, men jeg ser ikke ut til å finne svaret.
Jeg bruker VS Code, nodejs, typescript og gulp. Når jeg legger all koden for modulkontrollerne mine i en fil som dette:
<controllers.ts>
module Controllers {
export class Api {
get(controllerName:string):IController {
}
}
}
module Controllers {
export interface IController {
performAction(actionName:string):any;
}
}
module Controllers {
export class ControllerBase implements IController {
performAction(actionName:string):any {
}
}
}
module Controllers {
export class UserController extends ControllerBase {
}
}
export = Controllers;
Gulp kan kompilere det, og Node.js kjører det riktig.
Når jeg derimot deler det inn i flere filer, ser det ut til at jeg ikke får det til å kompilere:
<controllers.ts>
module Controllers {
export class Api {
get(controllerName:string):IController {
}
}
}
module Controllers {
export interface IController {
performAction(actionName:string):any;
}
}
module Controllers {
export class ControllerBase implements IController {
performAction(actionName:string):any {
}
}
}
export = Controllers;
<UserController.ts>
module Controllers {
export class UserController extends ControllerBase {
}
}
Jeg har prøvd å legge til
/// <reference path="./controllers.ts" />
til toppen av UserController.ts-filen min. Når jeg gjør det, kan den fortsatt ikke finne ControllerBase.
Jeg prøvde å gjøre
export class Controllers.UserController extends Controllers.ControllerBase
og det liker ikke Controllers før UserController, men hvis jeg fjerner den Controllers og får det til å se slik ut:
export class UserController extends Controllers.ControllerBase
da plasserer det åpenbart UserController i en annen modul.
Også, å importere det på denne måten:
import Controllers = require("./controllers");
ser heller ikke ut til å hjelpe. Jeg er ikke sikker på hva mer jeg kan prøve. All hjelp vil bli svært verdsatt. Det virker ikke som om dette ikke burde være oppnåelig.
Svar #1
Når man ser på å gjøre noe som dette, ser det ut til å være to problemer.
- Intellisense i ditt foretrukne kodeverktøy og
- Sammenstilling.
For mitt scenario er ikke intellisense et problem, fordi jeg ikke burde trenge intellisense på funksjonene i baseklassen for klassene som utvider baseklassen. Kompilering var min store utfordring. Her er løsningen jeg kom opp med. Jeg elsker den ikke, men den ser ut til å fungere.
var gulp = require('gulp');
var concat = require('gulp-concat');
var insert = require('gulp-insert');
var ts = require('gulp-typescript');
var del = require('del');
var tsOptions = {
noImplicitAny: true,
target: 'ES5',
module: 'commonjs'
};
gulp.task('clean', function(done) {
del(['./dest'], done);
})
gulp.task('compile-controllers', function() {
return gulp.src(['./src/controllers.ts', './src/*.ts'])
.pipe(concat('controllers.ts'))
.pipe(insert.append('export = Controllers;'))
.pipe(ts(tsOptions))
.js
.pipe(gulp.dest('dest/server'));
});
Svar #2
Typescript internt modul på tvers av flere filer i Nodejs
Ikke. Bruk eksterne moduler med kompilatorflagg --module commonjs i stedet: https://www.youtube.com/watch?v=KDrWLMUY0R0&hd=1
Hvis du fortsatt ikke er overbevist, her er flere grunner: https://github.com/TypeStrong/atom-typescript/blob/master/docs/out.md
