Node.js Nodejs中跨多个文件的Typescript内部模块

Node.js Nodejs中跨多个文件的Typescript内部模块,node.js,typescript,gulp,visual-studio-code,Node.js,Typescript,Gulp,Visual Studio Code,我一直在浏览StackOverflow帖子和多篇博客帖子,但似乎找不到答案 我正在使用VS代码、nodejs、typescript和gulp。 当我将所有模块控制器代码放入一个文件时,如下所示: <controllers.ts> module Controllers { export class Api { get(controllerName:string):IController { } } } module C

我一直在浏览StackOverflow帖子和多篇博客帖子,但似乎找不到答案

我正在使用VS代码、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;
export class UserController extends Controllers.ControllerBase
import Controllers = require("./controllers");
它不喜欢UserController之前的控制器,但如果我删除该控制器并使其看起来像这样:

 <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;
export class UserController extends Controllers.ControllerBase
import Controllers = require("./controllers");
显然,它将UserController放在不同的模块中

另外,按如下方式导入:

 <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;
export class UserController extends Controllers.ControllerBase
import Controllers = require("./controllers");
似乎也没用。我不知道还能尝试什么。任何帮助都将不胜感激。这似乎不是不可能实现的

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

不要。使用带编译器标志的
外部模块--module commonjs


如果您仍然不相信,这里有更多的原因:

当您考虑这样做时,似乎有两个问题

  • 您选择的编码工具中的Intellisense和
  • 汇编
  • 在我的场景中,intellisense并不重要,因为对于扩展基类的类,基类中的函数不需要intellisense。编辑是我最大的努力。这是我想出的解决办法。我不喜欢它,但它似乎确实管用

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

    谢谢你的回复。我看了你的视频,读了你的帖子,但仍然不知道如何实现我想要的。我想定义一个变量/未知数量的控制器,这些控制器都可以扩展ControllerBase。我希望它们生活在不同的文件中,以允许小的重点文件,但它们都生活在同一个模块(“名称空间”)下。这是可以实现的吗?从你的帖子中可以看出--out是我必须采取的方法,但不推荐这样做,因为你不能保证构建顺序,这可能会导致很多问题。这有什么办法吗?