我在Angular中使用提供程序,我有2个文件
user-service.ts
import { HttpClient } from '@angular/common/http';
...
sendTo(address:string, info:string, save:number) {
interface UserResponse {
success: string;
error: string;
text: string;
id: string;
}
return new Promise(resolve => {
this.http.get<UserResponse>('http://website.com/api/?action=send&key=' + this.apiKey + '&to=' + address + '&save=' + (save == 1 ? 1:0) + '&info=' + encodeURI(info))
.subscribe(data => {
resolve(data);
}, err => {
console.log(err);
});
});
}
还有我的home.ts
import { UserServiceProvider } from '../../providers/user-service/user-service';
...
this.userService.sendTo(this.formGroup.get("myAddress").value, this.formGroup.get("myInfo").value, this.formGroup.get("mySave").value).then(data => {
this.userService.getAlert(data.text, (data.id ? "ID: " + data.id:""));
if(data.success) this.formGroup.reset();
});
问题出在home.ts。
data.text给我一个错误:Property 'text' does not exist on type '{}'
data.success和data.id发生相同的问题
答案 0 :(得分:3)
您未指定返回类型sendTo
。由于它返回了Promise,因此TypeScript会将返回类型推断为Promise<{}>
。这意味着传递给.then
的参数将为{}
类型。
您可以改为使用return new Promise<UserResponse>
。但是,由于Observables具有.toPromise
方法,因此您甚至不需要使用Promise构造函数:
return this.http.get<UserResponse>(...).toPromise().catch(err => console.log(err));
您还可以更新sendTo
定义:
sendTo(address:string, info:string, save:number): Promise<UserResponse> {
最后,您可以在.subscribe
中使用home.ts
。