Подтвердить что ты не робот

Как использовать внешнюю библиотеку typescript из typescript без .d.ts?

Я определил их в моем .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?

4b9b3361

Ответ 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.