2016-02-04 9 views
5

私が作業しているAngular 2プロジェクトのtypescript定義を、エクスポート可能なライブラリにするために作成しようとしています。宣言をTRUEに設定すると、Typescriptエラーが発生する

私は次のように非常に同様の構成要素すべてへのHTTPリクエストを返すいくつかのサービスのセットアップがあります。

私は、このようなコンポーネント何かから​​呼び出す
public create(user:User) { 
    return this.http.post(this._apiUrls.create, 
    JSON.stringify(user), { 
     headers: this.apiConfig.getApiHeaders() 
    }); 
} 

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

このすべての作品を私がtypescript定義ファイルを作成できるように、tsconfigファイルで '宣言'をtr​​ueにするまでは問題ありません。

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. 

私はほとんどの問題を理解していますが、解決策はわかりません。 Observableをサービスにインポートすると、typescriptリンターは技術的にそれがそのファイルで使われていないのでエラーをスローします。

これはAngular 1から来ていますが、これは私たちのすべてのアプリケーションでコードを分割するのに似たパラダイムでしたが、角度2のアプローチを変更する必要があるかもしれません。私は他のAngular 2の例をたくさん見てきましたが、それらはすべて同じようにして行っています。

答えて

5

現時点では、コンパイラは自動的に型を宣言ファイルにインポートしません。

ここでは、インポートのためにlintルールを手動で無効にするか、タイプをインポートし、明示的なタイプのアノテーションを使用して、それを使用方法としてマークします。言い換えれば

// 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

いくつかの例では、私はあなたのソリューションを理解していなかった – DarkNeuron

+0

素敵だったでしょう。あなたは私が何をすべきかをより明確に説明できますか? –

+1

著者が明示的に 'Observable'をインポートすると、' node_modules/rxjs/Observable'から 'import {Observable} 'をインポートすると、エラーが修正されます。それが解決策です。その解決策を問題にしたのは、彼らのリンターが「観測可能」を未使用と考えていたことです。 * that *の解決策は、戻り値の型として 'Observable'を実際に使用することでした(' public create(user:User):Observable')。私は明確にするために私の答えを更新しました。 –

関連する問題