Как импортировать библиотеку js без файла определения в файл typescript
Я хочу перейти с JavaScript на TypeScript, чтобы помочь с управлением кодом, поскольку наш проект становится больше. Однако мы используем множество библиотек как amd Modules, которые мы не хотим конвертировать в TypeScript.
Мы по-прежнему хотим импортировать их в файлы TypeScript, но мы также не хотим генерировать файлы определений. Как мы можем достичь этого?
например. Новый TypeScript файл:
/// <reference path="../../../../definetelyTyped/jquery.d.ts" />
/// <reference path="../../../../definetelyTyped/require.d.ts" />
import $ = require('jquery');
import alert = require('lib/errorInfoHandler');
Здесь lib/errorInfoHandler
является модулем amd, включенным в огромную библиотеку JavaScript, которую мы не хотим касаться.
Используя приведенный выше код, возникают следующие ошибки:
Unable to resolve external module ''lib/errorInfoHandler''
Module cannot be aliased to a non-module type.
Это действительно должно привести к следующему коду:
define(["require", "exports", "jquery", "lib/errorInfoHandler"], function(require, exports, $, alert) {
...
}
Есть ли способ импортировать библиотеку JavaScript в TypeScript в качестве модуля amd и использовать его внутри файла TypeScript без создания файла определения?
Ответы
Ответ 1
Сочетание двух ответов, приведенных здесь, сработало для меня.
//errorInfoHandler.d.ts
declare module "lib/errorInfoHandler" {
var noTypeInfoYet: any; // any var name here really
export = noTypeInfoYet;
}
Я все еще новичок в TypeScript, но похоже, что это просто способ сообщить TypeScript опустить, экспортируя фиктивную переменную без информации о типе.
ИЗМЕНИТЬ
В комментариях к этому ответу было отмечено, что вы можете добиться того же результата, просто объявив:
//errorInfoHandler.d.ts
declare module "*";
См. комментарий github здесь.
Ответ 2
Создайте свой собственный файл определений со следующим содержимым:
declare module "lib/errorInfoHandler" {}
И ссылайтесь на этот файл, в котором вы хотите использовать импорт.
Или добавьте следующую строку в начало файла:
/// <amd-dependency path="lib/errorInfoHandler">
Примечание. Я не знаю, работает ли последний, как я изначально работал с отсутствующими зависимостями AMD. Также обратите внимание, что при таком подходе у вас не будет IntelliSense для этого файла.
Ответ 3
Создайте файл в lib
под названием errorInfoHandler.d.ts
. Там пишите:
var noTypeInfoYet: any; // any var name here really
export = noTypeInfoYet;
Теперь импорт alert
будет успешным и будет иметь тип any
.