L'utilisation du fichier index.ts pour exporter la classe provoque un indéfini dans un constructeur injecté

J'utilise un fichier index.ts pour encapsuler les exportations comme mentionné dans le guide de style angulaire 2 ( https://github.com/mgechev/angular2-style-guide/blob/master/old/README.md#directory-structure ).
Cela a bien fonctionné dans l'application, je l'ai écrit, mais pour une raison quelconque dans un service que je tente d'injecter dans un autre service, cela provoque une erreur étrange.

La classe exportée:

import {Injectable} from "angular2/core"; @Injectable() export class UserIds{ private _signature_id:string; private _role_id:number; get signature_id():string{ return this._signature_id; } set signature_id(id:string){ this._signature_id = id; } get role_id():number{ return this._role_id; } set role_id(id:number){ this._role_id = id; } } 

Le fichier index.ts:

 export {Midiate} from "./midiate.service/midiate.service"; export {HttpRest} from "./http_rest.service/http_rest.service"; export {UserIds} from "./user_ids.service/user_ids.service" 

Le code qui a provoqué l'erreur (le fichier d'importation):

 import {UserIds} from "../index"; import {Http} from 'angular2/http'; @Injectable() export class HttpRest{ constructor( public _http: Http, public userIdsx: UserIds ){} ... } 

L'erreur lancée par le navigateur:

 EXCEPTION: Cannot resolve all parameters for 'HttpRest'(Http, undefined). Make sure that all the parameters are decorated with Inject or have valid type annotations and that 'HttpRest' is decorated with Injectable. 

Comme vous pouvez le voir, la classe UserIds n'est pas définie dans les paramètres du constructeur.

La modification de l'importation UserIds dans le fichier source a permis de résoudre le problème:

 import {UserIds} from "../user_ids.service/user_ids.service"; 

Pourtant, je souhaite garder le style plus ancien à l'aide de l'index.ts comme tous les autres services et composants de mon application, et aussi comprendre pourquoi cela s'est produit.

Dans le guide de style de Minko Gechev, il fait référence au fichier par son nom. J'ai également rencontré ce problème et j'ai simplement déplacé mon fichier de façade sur un dossier, puis référencé ce fichier par son nom. J'ai également renommé le dossier pour éviter un conflit de noms avec le fichier de façade car les chemins se sont confondus car il n'y a pas d'extension de fichier dans le chemin

J'ai rencontré cette question qui demande à créer un fichier index.ts dans le dossier et ils ont le même problème que vous avez.

De

 | shared | services | login.service.ts | blog.service.ts 

À

 | shared | _services | login.service.ts | blog.service.ts | services.ts 

services.ts contient

 export {LoginService} from './_services/login.service' export * from './_services/blog.service' 

Je fais ensuite référence à mes services avec l'importation suivante

 import {LoginService, BlogService} from './shared/services' 

On dirait que l'ordre dans lequel vous mettez vos exportations dans l'index.ts importe! Je ne sais pas si c'est un bug ou non, mais de toute façon …

Les classes décorées avec des métadonnées devraient être en haut de l'index. Si l'un d'entre eux injecte un autre, le "autre" devrait être au-dessus de "l'un".