Búsqueda de sitios web

typescript - Importar interfaz desde un módulo con declaración export =


Muchos archivos de definición de tipos hacen uso de la directiva export =, como:

declare module "i40" {
    interface RouterStatic {
        () : Router;
    }

    interface RouteInfo {
        params : {
            [key : string] : any;
        };
        splats : string[];
        route : string;
        fn : Function;
        next : any;
    }

    interface Router {
        addRoute(routeString : string, action ?: Function);
        match(test : string) :RouteInfo;
    }

    export = null as RouterStatic;
}

Alternativamente, alguien podría haber escrito código así:

export interface Blah {}
const x = {hi : 5};
export = x;

EDITAR: Este código solía funcionar una vez, pero en la versión actual (2.6), no se compilará. El compilador dice que no puedo usar export = si exporto otras cosas desde el módulo. Lo cual tiene sentido.

¿Cómo importo una de las interfaces en el módulo? Ninguna de las siguientes funciona.

import Router = require('i40');
let x : Router.RouteInfo; //RouteInfo not found

import {RouteInfo} from 'i40'; //RouteInfo not found

import * as Router2 from 'i40'; //Error, i40 is not a module

Respuesta #1

Yo diría (módulos de referencia bajo Ambient Modules)

declare module "i40" {
  interface RouterStatic {
    ...
  }

  interface RouteInfo {
    ...
  }

  interface Router {
    ...
  }

  export { RouterStatic, RouteInfo, Router } as RouterStatic;
}

import * as Router2 from 'i40';
// use as Router2.RouterStatic,  etc

// or  
import { RouterStatic, RouteInfo, Router } from 'i40';
// use as RouterStatic,  etc