Angular 错误TS2339:属性';电子邮件';不存在于类型';对象';

Angular 错误TS2339:属性';电子邮件';不存在于类型';对象';,angular,Angular,我用的是angular 5,我有个错误,代码如下: signIn(provider) { this._auth.login(provider).subscribe( (data) => { console.log(data); this.hideForm = false; this.emaill = data.email; this.nom = data.last_name; this.p

我用的是angular 5,我有个错误,代码如下:

signIn(provider) {
    this._auth.login(provider).subscribe(
      (data) => {
        console.log(data);
        this.hideForm = false;

        this.emaill = data.email;
        this.nom = data.last_name;
        this.prenom = data.first_name;
        this.profileImage = data.image;
    })
}
错误是:

src/app/authentication/authentication.component.ts(34,28):错误TS2339:类型“Object”上不存在属性“email”。 src/app/authentication/authentication.component.ts(35,25):错误TS2339:类型“Object”上不存在属性“last\u name”。 src/app/authentication/authentication.component.ts(36,28):错误TS2339:类型“Object”上不存在属性“first\u name”。 src/app/authentication/authentication.component.ts(37,34):错误TS2339:类型“Object”上不存在属性“image”


将第三行的
(数据)
替换为
(数据:任意)

或更好地使用接口。 您可以声明接口:

export interface DataI {

 email: string;
 ...
 constructor(...){this.email = email .....}

然后将其用作类型

发生错误的原因是数据的类型对象没有您的属性。您可以检查对象是否具有您的属性并使用它:

if (data.hasOwnProperty('email')) this.email = data['email'];

检查对象的条件是否为空

if(data!==null && data!==undefined && data.email !==undefined)
{
    this.emaill = data.email;
    this.nom = data.last_name;
    this.prenom = data.first_name;
    this.profileImage = data.image;
}

我个人遇到了这个问题。原代码为:

if (response.data !== 'undefined') {
    // ...
}
应该是:

if (response["data"] !== 'undefined') {
    // ...
}

类型“Object”上不存在属性“hostname”

我正在使用Vue和typescript,尝试控制台时调试时出错。记录此错误。dropdownItems[0]。在中加载一些数据后,主机名。对于我来说,错误似乎是对变量声明的typescript类型检查:

dropdownItems: Array<Object> = []
源自:

在我的
Nodejs Typescript
项目中也发生了同样的错误-

代码-

app.post('/form-submit', (req, res) => {
   const errors = {};
   if (...condition) {
      errors.email = ['Email is not valid.'];
   }
});
错误-

Property 'email' does not exist on type '{}'.ts(2339)
解决方案(添加
:任何
和错误解决方案)-


您可以使用
数据:任意

signIn(provider) {
    this._auth.login(provider).subscribe(
      (data:any) => {
        console.log(data);
        this.hideForm = false;

        this.emaill = data.email;
        this.nom = data.last_name;
        this.prenom = data.first_name;
        this.profileImage = data.image;
    })
}

现在它可以正常工作了,因为我也遇到了同样的问题。

投票最多的答案并不好,因为它违背了Typescript的全部目的,Alex Lomia也提到了这一点

解决这个问题的方法是-

  • 要解决此问题,请创建一个描述您的模式并扩展
    mongoose的接口。文档:
    请在此勾选类似问题-

  • 使用Javascript而不是TypeScript,如果有人在后端使用NestJS,则很可能会遇到此错误。因此,如果您不想经历创建接口的过程,DTO也使用Javascript,那么使用Javascript生成的文件也会更小


  • 谢谢,但它给了我另一个错误:ts(40,3):错误TS1005:','预期。我的意思是在最后一个}中,函数没有任何错误。检查整个文件中是否存在其他可能的语法错误。请注意:当添加
    :any
    时,请确保将整个内容括在括号中。例如,当您要将
    数据
    强制转换为任意时,请使用
    (数据:任意)
    。另一个示例是,如果要将
    结果
    强制转换为
    任何
    ,则为:
    (结果:任何)
    。确保使用
    ()
    ,否则您将面临TSLint错误。希望这对其他人有所帮助。这不是一个好的解决方案,指定
    any
    只会关闭类型检查,从而破坏了Typescript的全部功能。
    const errors:any = {};
    
    signIn(provider) {
        this._auth.login(provider).subscribe(
          (data:any) => {
            console.log(data);
            this.hideForm = false;
    
            this.emaill = data.email;
            this.nom = data.last_name;
            this.prenom = data.first_name;
            this.profileImage = data.image;
        })
    }