2016-02-04 19 views
5

Próbuję utworzyć definicje maszynopisu na Kątowymi 2 projektu pracuję nad tak, że może on być eksportowane biblioteka.maszynopis błędy podczas ustawiania deklarację TRUE

Mam kilka usług setup że powrót żądań HTTP do komponentów wszystko całkiem podobny do następującego:

public create(user:User) { 
    return this.http.post(this._apiUrls.create, 
    JSON.stringify(user), { 
     headers: this.apiConfig.getApiHeaders() 
    }); 
} 

Co ja wtedy dzwonić z czymś komponentów takich jak to:

Session.create(user).subscribe((res:Response) => { 
    this.user = res.json().user 
}); 

To wszystko działa dobrze, dopóki nie zmieni "deklaracji" na true w pliku tsconfig, dzięki czemu mogę tworzyć pliki definicji maszynopisu. Zaczynam dostrzegać następujące błędy w przypadku niektórych z moich usług:

error TS4053: Return type of public method from exported class has or is using name 'Observable' from external module "node_modules/rxjs/Observable" but cannot be named. 

Przeważnie rozumiem problem, ale nie znam rozwiązania. Jeśli zaimportuję Obserwowalne do usługi, to maszynopisarka wyśle ​​błędy, ponieważ technicznie nie jest on używany w tym pliku.

Jadąc z kątowym 1 była podobna paradygmat wzięliśmy we wszystkich aplikacjach ukazali złamać nasz kod siebie, ale być może trzeba zmienić podejście kątowe 2? Przyjrzałem się wielu innym przykładom Angula 2 i wszyscy robili to również w podobny sposób.

Odpowiedz

5

dzień dzisiejszy, kompilator nie będzie automatycznie importować typy dla Ciebie w pliku deklaracji.

Obecnie najlepszym sposobem obejścia tego problemu jest ręczne wyłączenie reguł importowania, importowanie typu i użycie adnotacji typu jawnego, aby liner oznaczył ją jako użycie.

Innymi słowy

// Explicit import of 'Observable' so that '.d.ts' files 
// can be generated correctly. 
import { Observable } from "node_modules/rxjs/Observable"; 

// Explicit use of 'Observable' to satisfy your linter. 
public create(user: User): Observable { 
    return this.http.post(this._apiUrls.create, 
    JSON.stringify(user), { 
     headers: this.apiConfig.getApiHeaders() 
    }); 
} 
+0

Niektóre przykłady byłby miły – DarkNeuron

+0

nie rozumiałem swoje rozwiązanie. Czy możesz wyjaśnić mi jaśniej, co robić? –

+1

Autor powiedział, że jeśli zaimportują 'Observable' jawnie (tj.' Import {Observable} from "node_modules/rxjs/Observable" '), to naprawi to błąd. To jest rozwiązanie. Problem, który powodował, że to rozwiązanie jest problematyczne, polega na tym, że ich linter uznał, że "Observable" nie jest używany. Rozwiązaniem dla * tego * było użycie "Observable" jako typu zwracającego (tj. 'Public create (user: User): Observable'). Zaktualizowałem swoją odpowiedź, aby wyjaśnić. –

Powiązane problemy