2014-12-11 2 views
73

я определил это в моем .html файле:Как использовать внешнюю библиотеку без машинописного текста из машинописного текста без .d.ts?

<script type="text/javascript" src="bower_components/tree.js/tree.min.js"></script> 
<script type="text/javascript" src="bower_components/q/q.js"></script> 
<script type="text/javascript" src="test.js"></script> 

Тогда в test.js:

var myTree = Tree.tree({}) 

Но Машинопись ошибки, говоря: "Не удается найти имя" Дерево"

Я также попытался скомпилировать с --module amd и поместив import Tree = require("model/tree"); в начало файла test.js, но он снова ошибочно: Cannot find external module 'model/tree'., однако, очевидно, что он должен быть допустимым импортом, см. Здесь, где он был определен: https://github.com/marmelab/tree.js/blob/master/src/main.js

+1

Вам ** не нужно ** писать файлы .d.ts. См. Http://stackoverflow.com/questions/27273489/why-doesnt-type-script-support-referencing-javascript-files для примера – xmojmr

+0

, что все равно потребует от меня объявления объектов. У меня создалось впечатление, что TypScript полностью совместим с javascript. Я предполагаю, что это имеет смысл с точки зрения машинописного текста, ему как-то нужно прочитать код, и если бы у него не было ссылок, это были бы ошибки. – Blub

ответ

98

Я не хочу писать файлы .d.ts для каждого отдельного файла javascript, который я хочу использовать, серьезно ли это, что мне требуется для создания машинописного текста?

No. Простейшее/быстрое решение - просто сказать, что есть какая-то переменная Tree. Это так же просто, как:

declare var Tree:any; // Magic 
var myTree = Tree.tree({}) 

TypeSafety - это скользящая шкала в TypeScript. В этом случае вы сообщаете компилятору, что есть что-то под названием Tree, которым вы будете управлять и не заботитесь о многих типах безопасности за пределами того факта, что есть.

Больше

ИМХО: линия declare var Tree:any; гораздо проще синтаксис, чем другие veficiation инструменты JS бы вы написать, чтобы объявить использование переменных, которые не присутствуют в вашем коде.

+1

Хмм, это, похоже, не работает с импортом, хотя –

+0

Одним словом, Magic – robbpriestley

+6

Так это работает с импортом? – chrismarx

19

Вы можете определить «требуют» себя и использовать недокументированные функции драм-зависимостей Машинопись:

/// <amd-dependency path="model/tree" /> 
declare var require:(moduleId:string) => any; 
var Tree = require("model/tree"); 

«драм-зависимость» директива указывает компилятору, чтобы включить свой модуль «определить» аргументы в сгенерированном коде : see a sample here.

Вы также можете проверить a very good article, в котором объясняется, как использовать TypeScript с RequireJS.

Но учтите, что без написания правильных определений типаScript для вашего существующего кода вам не будет предоставлена ​​информация о типе, и поэтому вы не получите проверки безопасности типа, расширенное завершение кода в инструментах и ​​т. Д. Итак, ваше «Дерево» на самом деле будет иметь тип «any» и фактически будет динамическим JS-фрагментом внутри другого кода TS.

+0

Очень хорошая идея объявить 'require'. Спасибо за это!;) – Mark

Смежные вопросы