Я определил их в моем .html файле:
<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({})
Но ошибки Typescript: "Не удается найти имя" Дерево "
Я также попытался выполнить компиляцию с --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
Я хочу не писать файлы .d.ts для каждого отдельного файла javascript, который я хочу использовать, серьезно ли это то, что хочет Typescript?
Ответ 1
Я не хочу писать файлы .d.ts для каждого отдельного файла javascript, который я хочу использовать, серьезно ли это то, что хочет Typescript?
Нет. Самое простое/быстрое решение - просто сказать, что есть некоторая переменная Tree
. Это так же просто, как:
declare var Tree:any; // Magic
var myTree = Tree.tree({})
TypeSafety - это скользящая шкала в TypeScript. В этом случае вы сообщаете компилятору, что есть что-то, называемое Tree
, которым вы будете управлять, и не заботитесь о многих типах безопасности, кроме того, что он есть.
Подробнее
IMHO: Строка declare var Tree:any;
представляет собой гораздо более простой синтаксис, чем другие инструменты проверки JS, которые вы могли бы написать для объявления использования переменных, отсутствующих в вашем коде.
Ответ 2
Вы можете определить "require" самостоятельно и использовать недокументированную функцию amd-зависимостей TypeScript:
/// <amd-dependency path="model/tree" />
declare var require:(moduleId:string) => any;
var Tree = require("model/tree");
Директива 'amd-dependency' подскажет компилятору включить ваш модуль в "определение" аргументов в сгенерированном коде:
см. образец здесь.
Вы также можете проверить очень хорошую статью, в которой объясняется, как использовать TypeScript с RequireJS.
Но учтите, что без написания правильных определений TypeScript для вашего существующего кода вам не будет предоставлена информация о типе, и поэтому вы не получите проверки безопасности типов, расширенное завершение кода в инструментах и т.д. Таким образом, ваше "Дерево" фактически будет иметь тип "any" и фактически будет динамическим JS-фрагментом внутри другого кода TS.