Как импортировать библиотеку js без файла определения в файл typescript



Я хочу переключиться с JavaScript на TypeScript, чтобы помочь с управлением кодом, поскольку наш проект становится больше. Однако мы используем множество библиотек в качестве модулей amd, которые мы не хотим преобразовывать в 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 без создания файла определения?

743   3  

3 ответов:

комбинация из двух ответов, приведенных здесь, сработала для меня.

//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 здесь.

либо создайте свой собственный файл определения со следующим содержанием:

declare module "lib/errorInfoHandler" {}

и ссылки на этот файл, где вы хотите использовать импорт.

или добавьте следующую строку в начало файла:

/// <amd-dependency path="lib/errorInfoHandler">

примечание: Я не знаю, если последний все еще работает, это то, как я изначально работал с отсутствующими зависимостями AMD. Также обратите внимание, что при таком подходе у вас не будет IntelliSense для этого файла.

создать файл в lib под названием errorInfoHandler.d.ts. Вот, пиши:

var noTypeInfoYet: any; // any var name here really
export = noTypeInfoYet;

теперь alert импорт будет успешным и будет иметь тип any.

Comments

    Ничего не найдено.