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

Как импортировать библиотеку 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 без создания файла определения?

4b9b3361

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