J'ai converti ce code au dernier Angular 2. authentication.service.ts
À quoi devrait ressembler le code?
app/auth/auth.service.ts(30,40): error TS7006: Parameter 'u' implicitly has an 'any' type.
// services/auth.service.ts
import {Injectable} from '@angular/core';
import {Router} from '@angular/router';
//http://4dev.tech/2016/03/login-screen-and-authentication-with-angular2/
//https://github.com/leonardohjines/angular2-login
export class User {
constructor(
public email: string,
public password: string) { }
}
var users:any = [
new User('[email protected]','adm9'),
new User('[email protected]','a23')
];
@Injectable()
export class AuthenticationService {
constructor(
private _router: Router){}
logout() {
localStorage.removeItem("user");
this._router.navigate(['Login']);
}
login(user:any){
var authenticatedUser = users.find(u => u.email === user.email);
if (authenticatedUser){
localStorage.setItem("user", authenticatedUser);
this._router.navigate(['Home']);
return true;
}
return false;
}
checkCredentials( ){
if (localStorage.getItem("user") === null){
this._router.navigate(['Login']);
}
}
}
Pensez à utiliser (u: any) => ...
Vous pouvez essayer d'utiliser le type User
au lieu de any
:
var users:User[] = [
(...)
];
et
var authenticatedUser = users.find((u:User) => u.email === user.email);
La raison du problème est un paramètre qui n'est pas correctement défini, car il s'agit de la variable "u" qui suit l'exemple:
var authenticatedUser = users.find(u => u.email === user.email);
si vous ne possédez pas le modèle de classe de service, définissez "u" comme une chaîne ou un autre type dont vous avez besoin dans l'instant:
var authenticatedUser = users.find(u:string => u.email === user.email);
changement
fichier tsconfig.json
"noImplicitAny": false,
et ajouter
'ng2-formly': 'npm: ng2-formly/bundles/ng2-formly.umd.js',
à systemjs.config.js