类型“ {}”上不存在属性“文本”

时间:2018-09-27 13:35:14

标签: angular typescript ionic-framework

我在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发生相同的问题

enter image description here

1 个答案:

答案 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