Estoy trabajando en un proyecto de TypeScript (para el navegador) en el que usamos una biblioteca de terceros con definiciones de tipo de DefinitelyTyped. En las definiciones de tipo para la biblioteca, sus clases se declaran así:
declare namespace foo {
export class Bar {... }
export class Baz {... }
}
Sin embargo, la implementación real de la biblioteca coloca las clases en el ámbito global de modo que solo Bary Baz. Debido a esto, using foo.Barse compilará, pero no funcionará en tiempo de ejecución.
Para que funcione, me gustaría traer de alguna manera todas las exportaciones de fooal espacio de nombres global. No puedo encontrar ninguna forma obvia de hacer esto, por lo que mi mejor intento hasta ahora es crear un archivo de declaración ambiental que diga
declare type Bar = foo.Bar;
declare const Bar: typeof foo.Bar;
y repitiendo para cada clase exportada en foo. Esto me permite instanciar la clase, usarla como un tipo y llamar a cualquier función estática que pueda tener, pero declarar el mismo nombre dos veces para todos los tipos exportados no es lo ideal. Una forma más corta de lograr lo mismo parece ser
declare class Bar extends foo.Bar {}
pero ahora estoy extendiendo innecesariamente la clase, y la intención no está clara.
¿Hay una mejor manera de alias/extraer los tipos exportados foocomo globales?
Solución del problema
Hay una sintaxis dedicada para extraer cosas de los espacios de nombres.
import Bar = foo.Bar;
Traerá el tipo, el valor o los espacios de nombres con el nombre correspondiente al alcance bajo un solo término llamado Bar.
Asegúrese de que esté colocado en un contexto ambiental, como d.tsun archivo, o anidado dentro de un declarecontexto.
Si foono existe en tiempo de ejecución, entonces la declaración realmente necesita ser reparada.
Sin embargo, esto es solo una forma abreviada de su primera solución, y lo que realmente debe hacer es enviar una solicitud de extracción a definitivamente escrito para corregir la declaración porque está rota.
También tenga en cuenta que su segunda solución que involucra la extensión Barno debe usarse porque cambiará el comportamiento de su programa de formas inesperadas.
No hay comentarios:
Publicar un comentario