在Nodejs中跨多个文件的Typescript内部模块

我一直在通过StackOverflowpost和多个博客文章,但似乎无法find答案。

我正在使用VS Code,nodejs,typescript和gulp。 当我把我所有的模块控制器代码放入一个这样的文件:

<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能够编译它并且nodejs正确地运行它。

当我把它分解成多个文件时,我似乎无法得到它编译:

 <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 { } } 

我试过添加

 /// <reference path="./controllers.ts" /> 

到我的UserController.ts文件的顶部。 当我这样做,它仍然无法findControllerBase。

我试过了

 export class Controllers.UserController extends Controllers.ControllerBase 

它不喜欢UserController之前的控制器,但如果我删除该控制器,并使其看起来像这样:

 export class UserController extends Controllers.ControllerBase 

那么显然它将UserController放置在不同的模块中。

另外,像这样导入它:

 import Controllers = require("./controllers"); 

似乎也没有帮助。 我不知道还有什么要尝试的。 任何帮助将不胜感激。 这似乎不应该是可以实现的。

当看着这样的事情时,似乎有两个问题。

  1. 智能感知在你的编码工具的select和
  2. 汇编。

对于我的情况,intellisense不是一个问题,因为我不应该在扩展基类的类的基类中的函数上需要intellisense。 汇编是我的一大斗争。 这是我提出的解决scheme。 我不喜欢它,但它似乎工作。

 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')); }); 

在Nodejs中跨多个文件的Typescript内部模块

别。 通过编译器标志--module commonjs使用external modules : https : //www.youtube.com/watch?v = --module commonjs & --module commonjs = 1

如果你还不确定这里有更多的原因: https : //github.com/TypeStrong/atom-typescript/blob/master/docs/out.md