【发布时间】:2015-05-11 19:20:44
【问题描述】:
我的问题
我非常成功地创建了导入 Dojo 类的 TypeScript 类,例如 array、lang、Deferred、on、dom-construct 等等。第一次,我试图拉一些 dijit 的东西。具体来说,dijit/form/HorizontalSlider 和 dijit/form/VerticalSlider。但是,当我编译时,我不断得到:
error TS2304: Cannot find name 'HorizontalSlider'
我的代码
我有一个项目范围的 tsd.d.ts,如下所示:
/// <reference path="./dojo/dijit.d.ts" />
/// <reference path="./dojo/dojo.d.ts" />
我正在使用 Mayhem 的 dts,因为它们比绝对类型 (https://github.com/SitePen/mayhem/tree/master/typings/dojo) 的打字要好。下面是 HorizontalSlider 的定义:
declare module 'dijit/form/HorizontalSlider' {
import _FormValueWidget = require('dijit/form/_FormValueWidget');
interface HorizontalSlider extends _FormValueWidget {
}
export = HorizontalSlider;
}
编辑:根据 Ryan Cavanaugh 的回复澄清该语法,这里是来自相同 dts 的 DropDownButton:
declare module 'dijit/form/DropDownButton' {
import Button = require('dijit/form/Button');
interface DropDownButton extends Button {
}
var DropDownButton:{
new (kwArgs?:Object, srcNodeRef?:HTMLElement):DropDownButton;
};
export = DropDownButton;
}
最后,在我的课堂上,事情看起来应该是这样的:
/// <reference path="./../typings/tsd.d.ts" />
import HorizontalSlider = require('dijit/form/HorizontalSlider');
class MyDijit {
constructor() {
var foo = new HorizontalSlider(...);
}
}
而且,我得到了可怕的 TS2304。
我的尝试
编译器似乎看不到 dijit dts。所以,我尝试将 dts 添加到 grunt-typescript 任务中。
typescript: {
build: {
src: ['src/**/*.ts', 'typings/tsd.d.ts'],
options: {
module: 'amd',
target: 'es3',
sourceMap: true,
declaration: false
}
}
我也尝试更新我的 tsconfig.json
{
"compilerOptions": {
"declaration": false,
"module": "amd",
"noImplicitAny": true,
"target": "es3",
"filesGlob": [
"./src/**/*.ts",
"./typings/tsd.d.ts"
]
}
}
这也没有帮助!最后,考虑到编译器将这些类视为未使用,我什至尝试了这个:
/// <amd-dependency path="dijit/form/HorizontalSlider"/>
而且,没有运气。所以,我在 Stack Overflow 上,希望有一天能在 TypeScript 类中编译 dijit/form/xxx。有一个类似的 SO 问题,但不完全相同:Typescript cannot find name even though it is referenced
【问题讨论】:
标签: javascript dojo typescript dijit.form