interface - importaciones - ¿Cómo puedo exportar una interfaz que he importado?
exportar de siigo a excel (2)
Estoy creando una biblioteca en texto mecanografiado, que se distribuye en varios archivos. Tomo todas las clases y constantes que tengo define e importarlos en un módulo, que los exporta a todos bajo un espacio de nombre. Acabo de definir una interfaz, y deseo incluirla en el mismo espacio de nombres / módulo como todas las otras partes de mi biblioteca. Pero aparentemente no puedo.
Aquí hay un ejemplo simplificado:
/app.ts es el punto de entrada de la aplicación, todo lo que hago en él en este momento es incluir mi biblioteca MyLib:
//app.ts
import myLib = require("lib/MyLib/MyLib"); // this works fine
/lib/MyLib/MyLib.ts es el archivo en el que importo todas las cosas definidas por MyLib y las exporto juntas:
// lib/MyLib/MyLib.ts
import VehiclesImport = require("./transport/vehicles");
// error under VehiclesImport.IAutomobile, saying that VehiclesImport has no property IAutomobile
export var IAutomobile = VehiclesImport.IAutomobile;
export var Car = VehiclesImport.Car;
En /lib/MyLib/transport/vehicles.ts, defino varias clases e interfaces de vehículos, aquí, solo mostraré IAutomobile y Car:
// lib/MyLib/transport/vehicles.ts
export interface IAutomobile {
weight: number
}
export class Car implements IAutomobile {
weight = 3000
}
He intentado crear un camión de clase en MyLib.ts, que implementa IAutomobile correctamente, y funciona bien, sin ningún mensaje de error. El problema solo parece surgir cuando quiero acceder a IAutomobile fuera de una declaración de ''implementaciones''.
Me disculpo si esto parece un '''' volcado de código '''', pero en mi opinión, este es un problema grave que no puedo acceder a mis interfaces, excepto en una declaración de clase. He buscado en Google las últimas dos horas y no he encontrado nada sobre el tema. ¡Gracias por cualquier ayuda que me puedan dar!
Editar : entiendo que las interfaces mecanografiadas no son parte del código compilado de JavaScript, pero eso no debería impedir que las manipule dentro de un texto mecanografiado.
Use la palabra clave import
para traer algo al espacio de declaración de tipo (a diferencia de var
que lo trae al espacio de declaración de variables ).
Esto se demuestra a continuación. a.ts
:
export interface A {
val: number;
}
Para volver a exportar esto desde otro archivo b.ts
:
import a = require(''./a'');
export import B = a.A; // Important use of import
Uso de muestra en algunos otros archivos c.ts
:
import b = require(''./b'');
var foo: b.B;
foo.val = 123;
interface C extends b.B {
val2:number;
}
var bar: C;
bar.val2 = 456;
Los tipos no se pueden asignar a variables, existen en diferentes "espacios de declaración". Las clases se pueden asignar a variables, ya que contribuyen con sus nombres al espacio de declaración de tipo, así como a la definición de los objetos de clase. Las interfaces solo contribuyen al espacio de declaración de tipos, por lo que no pueden referenciarse como valores.
El lenguaje es un poco detallado, pero esto se detalla en la sección 2.3 de la especificación de idioma