2017-01-06 4 views
0

У меня проблемы с использованием собственных обещаний со второй угловой и машинописью:Угловые 2 и родные Обещания

export class LoginComponent implements OnInit { 

    public user = {}; 

    constructor(private authService:AuthenticationService) { } 

    ngOnInit() { 
    } 

    login() { 

     console.log('Connecting to server'); 

     this.authService.login(this.user).then((response) => { 

      // works 
      console.log(response['success']); 

      // error 
      console.log(response.success); 

     }, (error) => { 

      console.log(error); 
     }); 
    } 
} 

ниже простой сервис, с подделкой подключиться к серверу:

export class AuthenticationService { 

    // ... some code ... 

    login(loginData) { 

     let self = this; 

     return new Promise(function(resolve, reject){ 

      // fake delay - for now is no back end 
      setTimeout(function() { 

       if (loginData.username === 'username' && loginData.password === 'password') { 

        resolve({ 
         message: "Successfully logged in", 
         success: true, 
         errors: null 
        }); 
       } else { 

        reject({ 
         message: "Wrong user data reperesented", 
         success: false, 
         errors: { 
          "username": true, 
          "password": true 
         } 
        }); 
       } 
      }, 100); 
     }); 
    } 

    // ... some code ... 
} 

Пробовал поиск, что я должен сделать, чтобы решить ошибку Property 'success' does not exist on type '{}'., но без успеха.

+0

походит машинописный удар. как выглядит ваш authService.login? –

+0

* Кто * дает вам эту ошибку * когда *? – deceze

+0

@ DanielA.White Я обновил свой вопрос с примера обслуживания. – GomatoX

ответ

1

Это происходит потому, что код не указан.

Чтобы сделать эту работу он должен быть либо

login(loginData): Promise<any> { ... } 

или

this.authService.login(this.user).then((response: any) => { ... }) 

Лучший способ это сделать типы работают для вас, а не игнорировать их:

interface IAuthLoginResponse { 
    message: string; 
    success: boolean; 
    errors: any; 
} 

... 

login(loginData): Promise<IAuthLoginResponse> { 
    return new Promise<IAuthLoginResponse>(function (resolve, reject) { ... }) 
} 
Смежные вопросы