如何使用requirejs在typescript中导入knockout

时间:2013-04-07 21:05:00

标签: knockout.js requirejs typescript

我现在已经玩了几个小时的打字稿了,还没弄明白我是如何与我的模块一起导入淘汰赛的?

没有打字稿我会在我的define(["require", "exports", "knockout" ...],function(... , ko)中需要它,但我没有设法获取打字稿来生成它。

我不知道从jquery到淘汰赛的区别是什么,$工作得很好,但是ko是未定义的。

///<reference path="../knockoutd.d.ts" />
///<reference path="../jquery.d.ts" />
import dl = module("DataLayer");
import vm1 = module("AppBarViewModel");
import vm2 = module("Nav2ViewModelCommander");
import vm3 = module("IdentityViewModel");
export class AppViewModel {
...
}

结果:

    define(["require", "exports", "DataLayer", "AppBarViewModel", "Nav2ViewModelCommander",  "IdentityViewModel"], function(require, exports, __dl__, __vm1__, __vm2__, __vm3__) {
    var dl = __dl__;

    var vm1 = __vm1__;

    var vm2 = __vm2__;

    var vm3 = __vm3__;

更新

使用///<amd-dependency path="knockout" />

define(["require", "exports", "DataLayer", "AppBarViewModel", "Nav2ViewModelCommander", "IdentityViewModel", "knockout"], function(require, exports, __dl__, __vm1__, __vm2__, __vm3__) {
    var dl = __dl__;

    var vm1 = __vm1__;

    var vm2 = __vm2__;

    var vm3 = __vm3__;

4 个答案:

答案 0 :(得分:2)

要使编译器在生成的JavaScript中包含AMD依赖项而不在TypeScript中导入它们,您可以使用以下代码:

/// <amd-dependency path="path/to/knockout/js" />

此功能记录严密,但非常有用。

答案 1 :(得分:1)

问题是KnockoutJS没有在AMD环境中定义window.ko(即涉及RequireJS时)。因此,您必须使用///<amd-dependency />或使用KnockoutJS作为适当的模块。

我有来自DefinitelyTyped的drafted up an AMD version of knockout.d.ts - 它允许您使用import ko = module('knockout')。确保您同时获得 knockout.d.ts knockout.amd.d.ts

答案 2 :(得分:1)

使用knockout.d.ts的最新打字稿和类型定义

import ko = require('knockout')

按预期工作。

答案 3 :(得分:0)

添加以下内容:

import ko= module("knockout");

更新

案例1:

根据您的错误module can not be aliased to a none module type,这似乎更合理。您的knockout.ts文件不包含模块定义。要使用module指令导入文件文件,应该在该文件中定义一个模块。

案例2

如果这不起作用,很可能是由于:https://stackoverflow.com/a/13013956/390330你应该给出knockout.d.ts文件的路径:

import ko= module("/path/to/knockout.d.ts");

但是我认为不应该要求它,因为你引用的是.ts文件而不是.d.ts文件:

///<reference path="knockout.ts" />