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