Nodejs 中跨多个文件的 Typescript 内部模块
Typescript Internal Module Across Multiple Files In Nodejs
我一直在浏览 Whosebug 帖子和多篇博客帖子,但似乎找不到答案。
我正在使用 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");
似乎也没有帮助。我不确定还能尝试什么。任何帮助将不胜感激。这似乎不应该实现。
Typescript Internal Module Across Multiple Files In Nodejs
不要。将 external modules
与编译器标志 --module commonjs
一起使用:https://www.youtube.com/watch?v=KDrWLMUY0R0&hd=1
如果您仍然不相信这里还有更多原因:https://github.com/TypeStrong/atom-typescript/blob/master/docs/out.md
当考虑做这样的事情时,似乎有两个问题。
- 您选择的编码工具中的 Intellisense 和
- 编译。
对于我的方案,智能感知不是问题,因为对于扩展基础 class 的 class,我不需要对基础 class 中的函数进行智能感知].编译是我的一大难题。这是我想出的解决方案。我不喜欢它,但它确实有效。
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'));
});
我一直在浏览 Whosebug 帖子和多篇博客帖子,但似乎找不到答案。
我正在使用 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");
似乎也没有帮助。我不确定还能尝试什么。任何帮助将不胜感激。这似乎不应该实现。
Typescript Internal Module Across Multiple Files In Nodejs
不要。将 external modules
与编译器标志 --module commonjs
一起使用:https://www.youtube.com/watch?v=KDrWLMUY0R0&hd=1
如果您仍然不相信这里还有更多原因:https://github.com/TypeStrong/atom-typescript/blob/master/docs/out.md
当考虑做这样的事情时,似乎有两个问题。
- 您选择的编码工具中的 Intellisense 和
- 编译。
对于我的方案,智能感知不是问题,因为对于扩展基础 class 的 class,我不需要对基础 class 中的函数进行智能感知].编译是我的一大难题。这是我想出的解决方案。我不喜欢它,但它确实有效。
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'));
});