2016-07-31 13 views
3

私は、TypescriptでAngular 2を使ってアプリケーションを構築しています。私のセッターとゲッターにはどのような戻り値の型があるべきですか?ゲッターとセッターのObservablesのTypescript戻り型

import { Injectable } from '@angular/core'; 
import { Http, Response } from '@angular/http'; 
import { Events, SqlStorage, Storage } from 'ionic-angular'; 
import { Subject } from 'rxjs/Subject'; 


export interface User { 
    name?: string, 
    email?: string, 
    gender?: string, 
    picture?: Object 
} 

export interface DataStore { 
    user: User 
} 

@Injectable() 
export class UserService { 

    private storage: Storage; 
    private _user$: Subject<User>; 
    private dataStore: DataStore; 

    constructor(
    private http: Http 
) { 
    this.storage = new Storage(SqlStorage); 
    this._user$ = new Subject(); 
    this.dataStore = { user: {} }; 
    } 

    set user$(user: User) { 
    this.storage.set('user', JSON.stringify(user)); 
    this.dataStore.user = user; 
    this._user$.next(this.dataStore.user); 
    } 

    get user$() { 
    const subject = this._user$; 
    const source = subject.asObservable(); 
    return source; 
    } 

} 

私はこれを試してみました:

set user$(user: User): void {} 
get user$(): Observable<User> {} 

しかし、これらのエラーを投げる:

エラーTS2380: '取得' と '設定' アクセサが同じ型を持っている必要があります。エラー

TS1095:「設定」アクセサには戻り値の型の注釈を付けることはできません。エラー

TS2380: 'get'と 'set'アクセサーは同じタイプでなければなりません。エラー

TS2322:タイプ 'User'は 'Observable'タイプに割り当てられません。

エラーTS2322:タイプ 'ユーザー' は

'観察可能な' 型に代入できません。タイプ 'User'に '_isScalar'プロパティがありません。

答えて

1

私はあなたがほとんどそこにいると思いますが、あなたが提供したコードでは、セッターを使用して質問します。あなたのセッター内のコードを見ると、実際には何も_user $に設定されていません。

私はこれがあなたをトリッピングしていると思いますが、ここでセッターを使用するべきではないと思います。あなたのセッターの中でコードが何をしているかに基づいて、これは単に公の関数でなければなりません。これは、私はそれがサービスを使用しているコンポーネントは、UserService.setUser(userObj)を呼び出します次に

constructor(private http: Http) { 
    this.storage = new Storage(SqlStorage); 
    this._user$ = new Subject(); 
    this.dataStore = { user: {} }; 
} 

setUser(user: User) { 
    this.storage.set('user', JSON.stringify(user)); 
    this.dataStore.user = user; 
    this._user$.next(this.dataStore.user); 
} 

get user$() { 
    return this._user$.asObservable(); 
} 

ようになるはずだと思うのです。唯一の許可の組み合わせです実際

get var(): User {} 
set var(user: User) {} 

そして

get var(): Observable<User> {} 
set var(user$: Observable<User>) {} 

+0

ありがとうございます!私はセッターを使わない他の同様の例を見た。 –

2

あなたがエラーメッセージに従うとき、あなたはセッターとゲッターの2つだけのペアを持つことになります。

関連する問題