当前位置 : 主页 > 网页制作 > Nodejs >

node.js – Nodejs中多个文件的Typescript内部模块

来源:互联网 收集:自由互联 发布时间:2021-06-16
我一直在倾注StackOverflow帖子和多篇博文,但似乎无法找到答案. 我正在使用VS Code,nodejs,typescript和gulp. 当我将所有模块控制器代码放入一个文件时,如下所示: controllers.ts module Controllers {
我一直在倾注StackOverflow帖子和多篇博文,但似乎无法找到答案.

我正在使用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文件的顶部.当我这样做时,它仍然找不到ControllerBase.

我试过了

export class Controllers.UserController extends Controllers.ControllerBase

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

export class UserController extends Controllers.ControllerBase

那显然它将UserController放在一个不同的模块中.

另外,像这样导入它:

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

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

在考虑做这样的事情时,似乎有两个问题.

>您选择的编码工具中的智能感知
>编译.

对于我的场景,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'));
});
网友评论