[英]Typescript return type for Observables in getter and setter
我正在使用 Angular 2 和 Typescript 構建一個應用程序。 我的 setter 和 getter 應該有什么返回類型?
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:“get”和“set”訪問器必須具有相同的類型。 錯誤
TS1095:“set”訪問器不能有返回類型注釋。 錯誤
TS2380:“get”和“set”訪問器必須具有相同的類型。 錯誤
TS2322:“用戶”類型不可分配給“可觀察”類型。
錯誤 TS2322:類型“用戶”不可分配給類型
'可觀察'。 “用戶”類型中缺少屬性“_isScalar”。
我想你快到了,但我質疑使用 setter,至少在你提供的代碼中。 當您查看 setter 中的代碼時,您實際上並未對 _user$ 設置任何內容。
我認為這是絆倒你的原因,我認為你不應該在這里使用二傳手。 根據代碼在您的 setter 中執行的操作,這應該只是一個公共函數。 這就是我認為它應該是什么樣子
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();
}
然后您使用該服務的組件將調用 UserService.setUser(userObj)。
當您遵循錯誤消息時,您將只有兩對 setter 和 getter:
get var(): User {}
set var(user: User) {}
並且
get var(): Observable<User> {}
set var(user$: Observable<User>) {}
實際上,這是唯一允許的組合。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.