2016-06-25 7 views
0

Verwendung Ich habe die folgende Ordnerstruktur:Fehlgeschlagen Auflösung der Importe relativen Pfad

enter image description here

Mein Versuch, Sprache-Event-Teilnehmer in den language.component.ts bei Import ist so

import {LanguageEventSubscriber} from './language-event-subscriber' 

Obwohl die Klasse in der IDE scheinbar aufgelöst wird, wird die Klasse zur Laufzeit nicht als Beweis gefunden, weil ihre Protokollanweisungen nicht gedruckt werden konnten.

jedoch folgende Arbeiten:

import './language-event-subscriber' 

Noch im selben Ordner die folgenden Entschlüssen und arbeitet zur Laufzeit

import {EventSubscriber, On} from "event-dispatch"; 
import {Language} from './language.model' 

@EventSubscriber() 
export class LanguageEventSubscriber { 
    @On('onValidLanguage') 
    onValidLanguage(language: Language) { 
     console.log(language); 
    } 

    @On('onInvalidLanguage') 
    onInvalidLanguage(status: string) { 
     console.log("New status: "); 
    } 
} 

Warum diese Inkonsistenz?

Dank

+0

Können Sie teilen, was in 'language-event-subscriber.ts' steht? Ohne es zu sehen, vermute ich, dass Sie die Klasse "LanguageEventSubscriber" nicht in diese Datei exportieren. Nur eine Vermutung. – filoxo

Antwort

0

Auf der Grundlage der Dokumentation von den event-dispatch package, auch wenn Sie export class LanguageEventSubscriber in Ihrer Definition haben, ist dies nicht eigentlich eine Klasse, die importiert werden sollte und auf die gleiche Weise wie andere Module verbraucht. Wenn Sie die häufigere Weise zu tun waren, den Code, der Ihr Modul nutzt etwas aussehen würde:

// This is NOT the way to use this package 
import {LanguageEventSubscriber} from './language-event-subscriber'; 

let les = new LanguageEventSubscriber(); 
// ... respond to events using your variable ... 

Das ist jedoch nicht, wie dieses Paket verwendet werden soll. Wegen des @EventSubscriber() Dekorateur in Ihrer Klassendefinition, Ihre Event-Handler Objekte vom Typ verfügbar sind EventDispatcher und werden wie folgt verwendet:

import {EventDispatcher} from "event-dispatch"; 
import "./language-event-subscriber"; 

let ed = new EventDispatcher(); 
ed.dispatch("onInvalidLanguage", "Sorry. That language is unavailable."); 
// ... etc. ... 

Basierend auf the Typescript documentation, würde ich vermuten, dass der Grund, warum Sie haben Ihr Modul zu importieren, in Auf diese Weise wird es wie ein Nebeneffekt behandelt, der im Abschnitt "Importieren eines Moduls nur für Nebenwirkungen" beschrieben wird.

Ich denke nicht, dass dies notwendigerweise inkonsistent ist, aber es ist möglich, dass das event-dispatch-Paket in einer nicht standardmäßigen Weise codiert wurde. Es scheint ein relativ neues Paket mit einer kleinen Anzahl von Downloads zu sein, also ist dies reine Spekulation, aber es könnte einfach sein, dass die Entwickler des Pakets nicht wussten oder nicht das Standard-Idiom für Typescript zu befolgen.

Verwandte Themen