打字稿/ Dojo使用AMD加载数据文件

时间:2014-06-04 10:57:53

标签: dojo typescript

打字稿新手在这里。我有一个Dijit Widget,我正在尝试将其转换为Typescript。 它显然存在于AMD模块中。

Bryan Forbe's .d.ts files给了我大部分声明,我需要转变我的前任

define(['dojo/_base/declare'], ...

样式导入惯用语

import dojoDeclare = require('dojo/_base/declare');

至于还没有.d.ts的依赖关系,我认为在全局环境中进行以下黑客应该足以分流类型系统并顺利选择加入,不是吗?

declare module 'dojox/gfx' {
    var gfx: any;
    export = gfx;
}

然而,加载小部件模板或国际化数据文件将无法实现。我不能简单地写

declare module 'dojo/text!./templates/Widget.html' {
    var html: string;
    export = html;
}
import template = require('dojo/text!./templates/Widget.html');

我怀疑字符串格式对于Typescript是非法的。但是,嘿,那是我需要的字符串。

绕过这个问题的一种方法是回到Dojo的AMD加载器上,使用require以及回调和承诺以及内部内部已经是AMD define块的内容。这会让我陷入异步虐恋。

因此我想知道:有没有一种方法可以无缝地使用主机的AMD机制,而无需使用Typescript进行自己的检查?


在第一个发布的答案后编辑。

正如Basarat所建议的那样,我已经宣布了与

的依赖关系
/// <amd-dependency path='dojo/text!./templates/Widget.html' />

这确实将所需文件添加到define的依赖项列表中。 但是,它没有提供将模块的返回值转换为回调参数的方法。

Colin Snover's Definitive Typescript Guide就是这样

var template:string = require('dojo/text!./templates/Widget.html');

这在每种情况下都可以正常工作,因为在回调体运行时,依赖性已经被加载,现在由define语句出现在amd-dependency列表中。< / p>

1 个答案:

答案 0 :(得分:2)

/// <amd-dependency path="jquery"/>

这会将jquery添加到define调用而不进行任何类型检查。