代码之家  ›  专栏  ›  技术社区  ›  Poul K. Sørensen

如何使用requirejs在typescript中导入淘汰

  •  4
  • Poul K. Sørensen  · 技术社区  · 12 年前

    我已经玩了几个小时的打字了,还不知道如何将淘汰赛与我的模块一起导入?

    如果没有打字稿,我需要它在我的 define(["require", "exports", "knockout" ...],function(... , ko) ,但我还没能得到生成它的typescript。

    我不知道从jquery到knockout有什么区别,$很好,但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 回复  |  直到 12 年前
        1
  •  2
  •   thomaux    12 年前

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

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

    这个功能记录得很糟糕,但非常有用。

        2
  •  1
  •   diachedelic    11 年前

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

    我有 drafted up an AMD version of knockout.d.ts 来自绝对类型-它将允许您使用 import ko = module('knockout') 。请确保您同时获得 击倒.d.ts 敲除.amd.d.ts .

        3
  •  1
  •   Poul K. Sørensen    11 年前

    使用最新的typescript和knockout.d.ts的类型定义

    import ko = require('knockout')
    

    如预期工作。

        4
  •  0
  •   Community CDub    7 年前

    添加以下内容:

    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" />