【问题标题】:How to get knockout imported in typescript with requirejs如何使用requirejs在打字稿中导入淘汰赛
【发布时间】:2013-03-29 20:49:53
【问题描述】:

我已经用 typescript 玩了几个小时了,还没有弄清楚如何将淘汰赛与我的模块一起导入?

如果没有 typescript,我会在我的 define(["require", "exports", "knockout" ...],function(... , ko) 中需要它,但我还没有设法让 typescript 生成它。

我不知道从 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__;

更新

///&lt;amd-dependency path="knockout" /&gt;

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__;

【问题讨论】:

  • 您的knockout.ts 文件是 Knockout 的 TypeScript 版本还是 Knockout 的定义文件?您可能需要共享 Knockout 文件才能获得正确答案。
  • 对不起。那是我在玩耍以尝试使其正常工作。那是一个定义文件。淘汰赛.d.ts

标签: knockout.js requirejs typescript


【解决方案1】:

添加以下内容:

import ko= module("knockout");

更新

案例 1:

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

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

【讨论】:

  • 我得到一个“名称“knockout”在当前范围内不存在。模块不能别名为无模块类型”。
【解决方案2】:

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

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

此功能记录不充分,但非常有用。

【讨论】:

  • 会试一试,是的,如果有更多记录,我会节省几个小时的挫败感。
  • 有点效果。它向依赖项添加了淘汰赛,但不是函数(....,ko)。
  • 我将其添加到问题中。但它只包括对依赖项的淘汰。我已经在 require config 中定义了路径,例如敲除:'path/to/knockout'
  • 我把最小的解决方案放在 github 上。随意摆弄它。 github.com/s093294/typescript-knockout 让我知道你是否可以让它工作。
  • ko 在找到 AMD 加载程序时取消定义其全局,因此它不在附近
【解决方案3】:

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

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

【讨论】:

  • knockout.amd.d.ts 现在没了,对吧?我刚刚使用最新的打字稿版本开始了一个新项目,但又遇到了麻烦。 import ko = module("knockout");
  • knockout.amd.d.ts 不是必需的。 knockout 是一个命名的 amd 模块,因此该模块在 knockout.d.ts 中定义。你可以做 import ko = require("knockout");最新的 ts 和类型定义就好了。
【解决方案4】:

为 knockout.d.ts 提供最新的打字稿和类型定义

import ko = require('knockout')

按预期工作。

【讨论】:

    猜你喜欢
    • 2013-08-05
    • 2014-08-08
    • 2019-12-19
    • 2016-04-19
    • 2013-05-17
    • 2012-10-03
    • 2013-10-21
    • 1970-01-01
    • 2013-04-10
    相关资源
    最近更新 更多