私はTypescriptの学習を始めましたが、既にC#開発者にとっては本当に奇妙な音で迷っています。有効なクラスインスタンスを返さないことを約束します
概要:Promise<WsIdSessionResponse>
WsIdSessionResponse
クラスの同じフィールドを持っていますが、それが有効なWsIdSessionResponse
インスタンスではありません変数を返します。
export class WsIdSessionService {
constructor(private http: HttpClient) { }
doLoginAsync(user: string, pwd: string): Promise<WsIdSessionResponse> {
let params = new HttpParams();
params = params.append('username', user);
params = params.append('password', pwd);
return this.http.get<WsIdSessionResponse>(this.apiUrl, {params: params})
.toPromise());
};
WsIdSessionResponseクラスは、このようなものです:私はこの(私は問題のために役に立たない何かを省略しました)私が書いていないJSONのWebサービスを消費するようなサービスを持っている
長い話
export class WsIdSessionResponse {
public status: number;
public username: string;
public isOk(): boolean {
return this.status == 1;
}
}
私はWsIdSessionService
からデータを取得する際に問題が来る:
var idSvc = this.wsIdSession.doLoginAsync(user, pwd);
var t = idSvc.then(info => {
if (t.isOk()) {
// Do something here
}
}
私はt.isOk()
を実行すると、私はisOk()
が関数ではないことを私に言ってエラーが出ます!
何ですか?機能ではない?はい、私のクラスにはその機能があります!
は、膨大な時間を無駄にした後、私は最終的に私はfalse
結果として取得し、このコードここ
var idSvc = this.wsIdSession.doLoginAsync(user, pwd);
var t = idSvc.then(info => {
console.warn(`info is valid: ${info instanceof WsIdSessionResponse}`);
}
をしようと考えた:そう返された変数は、私が必要とするクラスの同じフィールドを持っていますが、それは本当ではありませんクラスのインスタンスとその理由isOk()
関数が有効ではありません!
これはどのように可能ですか?つまり、は、WsIdSessionResponse
の有効なインスタンスを返す必要があります。最終的にはエラーです...間違っていますか?
完全な情報を提供するだけです。http.get<WsIdSessionResponse>
は、単純なJSON文字列を返すURLからデータを取得します。
これは予期された動作ですか、何か間違っていますか?
ユーザーはC#の背景とまったく同じ問題を抱えていたように見えます。 TSはコンパイル時に型エラーのJSです。 JSから期待されないオブジェクトに対する魔法の変換は行いません。 – estus