AMD模块的TypeScript动态加载以“找不到符号'...”结尾

时间:2014-01-30 15:28:51

标签: visual-studio compilation requirejs typescript amd

不,这个主题不会回答我的问题,不,解决方案不仅仅是在nav.ts文件中导入Command。 nav.ts是许多viewModel文件之一,它们将根据需要动态加载。唯一的问题是在类的构造函数中设置参数的类型。 (类型必须是“命令”)


在下面的类中,它将由require.js加载,方法viewModel()需要一个动态的新类。在这种情况下NavViewModel

command.ts

export class Command {

...

    public viewModel(name: string, callback: Function) {
        require(["noext!boot/getViewModel/" + name], function (viewModel) {
            callback(viewModel);
        });
    }
}

这是将由viewModel()提取的类:

nav.ts

export class NavViewModel extends kendo.Router {
    constructor(command: Command) {
        super();

        this.route('/:name', function (name) {
            command.view(name, $('div.content'));
        });

        this.start();
    }
}

修改 这是入口点(在评论2中要求)

main.ts (EntryPoint)

import lib = require("command");

var cmd = new lib.Command();
cmd.viewModel('nav', function (o) {
    cmd.view('nav', $('div.header'), function () {
        kendo.bind($('.header .nav'), new o.NavViewModel(cmd));
    });
});

/修改

问题:

Visual Studio将抛出error TS2095: Could not find symbol 'Command',因为此模块中未定义“Command”类。

如果将从NavViewModel构造函数中删除“Command”-Type,程序将正常工作。是否有任何解决方案可以在NavViewModel中引用Command类?

这不起作用:

/// <reference path="../../Scripts/command.ts" />

1 个答案:

答案 0 :(得分:1)

使用RequireJS时,import语句应该是应用程序的 root 的完整路径。

我也使用稍微不同的导出语法

<强> command.ts

class command {
    ...
}

export = command;

<强> main.ts

// I'm assuming the Scripts folder is at the root of the application
import Command = require('Scripts/command');

var cmd = new Command();

注意

我正在使用Typescript 0.9.1.1。我无法将我的机器升级到0.9.5,因为大型内部应用程序受到版本之间的一些重大变化的影响