打字稿,无法加载内部模块

时间:2015-05-26 12:01:40

标签: javascript typescript

我实际上是在学习打字稿,而且我面临内部模块的一些问题。

事实上,我有三个文件:

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:每个文件都在同一个文件夹中,它只是一个学习应用程序。

感谢您提前

1 个答案:

答案 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;
}