Моя проблема
Мне очень удалось создать классы TypeScript, которые импортируют классы Dojo, такие как array, lang, Deferred, on, dom-construct и все такое. Впервые я пытаюсь вытащить кое-что из диджита. В частности, 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" />
Я использую dts от Mayhem, потому что они лучше, чем типизация в DefinentyTyped (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;
}
РЕДАКТИРОВАТЬ: чтобы уточнить этот синтаксис, основанный на ответе Райана Кавано, вот DropDownButton из того же dts:
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 в надежде, что когда-нибудь получится dijit / form / xxx для компиляции внутри класса TypeScript. Есть один похожий вопрос SO, но не совсем такой: Typescript не может найти имя, даже если на него есть ссылка