【发布时间】: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/text!,这有点简单(就像在正常情况下不一样复杂)
标签: dojo typescript