javascript - que - Cómo importar una biblioteca js sin archivo de definición en archivo de mecanografía
que hacer con javascript (3)
Quiero pasar de JavaScript a TypeScript para ayudar con la administración del código a medida que nuestro proyecto se hace más grande. Sin embargo, utilizamos muchas bibliotecas como módulos AMD, que no queremos convertir a TypeScript.
Todavía queremos importarlos en archivos TypeScript, pero tampoco queremos generar archivos de definición. ¿Cómo podemos lograr eso?
Por ejemplo, el nuevo archivo de Typescript:
/// <reference path="../../../../definetelyTyped/jquery.d.ts" />
/// <reference path="../../../../definetelyTyped/require.d.ts" />
import $ = require(''jquery'');
import alert = require(''lib/errorInfoHandler'');
Aquí, lib/errorInfoHandler
es un módulo amd incluido en una gran biblioteca de JavaScript que no queremos tocar.
El uso del código anterior produce los siguientes errores:
Unable to resolve external module ''''lib/errorInfoHandler''''
Module cannot be aliased to a non-module type.
Esto realmente debería producir el siguiente código:
define(["require", "exports", "jquery", "lib/errorInfoHandler"], function(require, exports, $, alert) {
...
}
¿Hay alguna manera de importar una biblioteca JavaScript en TypeScript como un Módulo amd y usarla dentro del archivo TypeScript sin crear un archivo de definición?
Cree su propio archivo de definición con el siguiente contenido:
declare module "lib/errorInfoHandler" {}
Y haga referencia a este archivo donde desea usar la importación.
O agrega la siguiente línea al principio de tu archivo:
/// <amd-dependency path="lib/errorInfoHandler">
Nota: No sé si el último todavía funciona, es cómo trabajé inicialmente con las dependencias de AMD que faltan. Tenga en cuenta también que con este enfoque no tendrá IntelliSense para ese archivo.
Cree un archivo en lib
llamado errorInfoHandler.d.ts
. Ahí, escribe:
var noTypeInfoYet: any; // any var name here really
export = noTypeInfoYet;
Ahora la importación de alert
tendrá éxito y será de tipo any
.
Una combinación de las 2 respuestas dadas aquí funcionó para mí.
//errorInfoHandler.d.ts
declare module "lib/errorInfoHandler" {
var noTypeInfoYet: any; // any var name here really
export = noTypeInfoYet;
}
Todavía soy nuevo en TypeScript, pero parece que esta es solo una forma de decirle a TypeScript que deje de exportar una variable ficticia sin información de tipo sobre ella.
EDITAR
Se ha observado en los comentarios de esta respuesta que puede lograr el mismo resultado simplemente declarando:
//errorInfoHandler.d.ts
declare module "*";
Vea el comentario de github here .