【问题标题】:Typescript/Dojo Use AMD to load a data fileTypescript/Dojo 使用 AMD 加载数据文件
【发布时间】:2014-06-04 22:10:07
【问题描述】:

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

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

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

风格导入到惯用语

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

对于还没有 .d.ts 的依赖项,我认为在全局上下文中进行以下 hack 应该足以分流类型系统并顺利选择加入,不是吗?

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');

这在任何情况下都可以正常工作,因为在回调主体运行时,依赖项已经加载,现在由于amd-dependency 语句而出现在define 的列表中。

【问题讨论】:

标签: dojo typescript


【解决方案1】:
/// <amd-dependency path="jquery"/>

这会将 jquery 添加到定义调用中,而无需任何类型检查。

【讨论】:

  • 嗨,Basarat,感谢您的提示,我不知道那个。我想写的评论有点长,所以我会用它来编辑最初的问题。
猜你喜欢
  • 2012-10-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-10-28
  • 2012-10-10
  • 2012-11-11
  • 2012-01-31
  • 1970-01-01
相关资源
最近更新 更多