我实际上是在学习打字稿,而且我面临内部模块的一些问题。
事实上,我有三个文件:
index.ts,其中我启动了我的应用
///<reference path='RouteManager.ts'/>
import RouteManager = RestifyRouting.RouteManager;
var myManager = new RouteManager();
myManager.init("superpath");
管理我的REST路由的RouteManager.ts
///<reference path='RouteParser.ts'/>
module RestifyRouting {
export class RouteManager {
routeParser:RouteParser;
constructor() {
}
public init(filePath) {
this.routeParser = new RouteParser();
this.routeParser.register("zfaf","callback");
console.log(filePath);
}
}
}
RouteParser必须解析一些字符串才能获得一些信息
module RestifyRouting {
export class RouteParser {
constructor() {
}
public register(path, callback) {
console.log('super register');
}
}
}
我有一个gulp文件,可以创建我的.js和d.ts文件,除了index.js文件外,它还可以运行。编译器告诉我RestifyRouting(这是我的内部模块)是未定义的,我不知道为什么......
你能帮助我吗?
PS:每个文件都在同一个文件夹中,它只是一个学习应用程序。
感谢您提前
答案 0 :(得分:2)
从TypeScript 1.5开始,模块语法与ES6模块语法一致,这也是我一直在使用的......
您可以删除对TypeScript模块的任何引用,只需直接导出类
<强> index.ts 强>
import { RouteManager } from './RouteManager';
var myManager = new RouteManager();
myManager.init("superpath");
<强> RouteManager.ts 强>
import { RouteParser } from './RouteParser';
export class RouteManager {
routeParser:RouteParser;
constructor() {}
public init(filePath) {
this.routeParser = new RouteParser();
this.routeParser.register("zfaf","callback");
console.log(filePath);
}
}
<强> RouteParser.ts 强>
export class RouteParser {
constructor() {}
public register(path, callback) {
console.log('super register');
}
}
保留模块
如果您想继续使用内部模块,那么您必须确保导出模块以及模块内的类。
// RouteManager.ts
export module RestifyRouting {
export class RouteManager{}
}
//index.ts
import { RestifyRouting } from './RouteManager';
//usage
var manager = new RestifyRouting.RouteManager();
要记住的是,您将无法将多个项目导入相同的名称。
// i.e.
import { RestifyRouting } from './RouteManager';
import { RestifyRouting } from './RouteParser';
NOTES import语句中的
{}
语法可以允许多次导入
{ Class1, Class2 }
如果导出默认值,则可以跳过{}
:
//Source (foo.ts):
export default class Foo{}
//Reference:
import Foo from './foo';
//usage:
class User {
foo: Foo;
}