Búsqueda de sitios web

angular - La propiedad no existe en el tipo 'string'.ts(2339)


Entonces aquí está mi código y tengo este error y no entiendo por qué. Necesito algo de ayuda aquí... No sé por qué está pasando esto: La propiedad no existe en el tipo 'string'.ts(2339) en: return users.find(u => u.userName === user.userName && u.password === user.password) en u.userName y u.password. Por favor, ayuda.

import { Injectable } from '@angular/core';

@Injectable({
  providedIn: 'root'
})
export class AuthService {

  constructor() { }

  authUser(user: any) {
    let users : string[] = [];
    if(localStorage.getItem('Users')) {
      users = JSON.parse(localStorage.getItem('Users') || '{}');
    }
    return users.find(u => u.userName === user.userName && u.password === user.password)
  }
}

Respuesta #1

cambia como abajo para resolver:

dejar usuarios : any[]=[];

la razón principal es que el string[] no tiene una propiedad como

nombre de usuario o contraseña

sugerencia: hay demasiadas lagunas lógicas en la función authUser, por lo que deberías escribir la función para manejar la lógica de manera más precisa.

Respuesta #2

Como se estableció en otra respuesta, lo has declarado como un array de cadenas, el cual no tiene propiedades como password y username. Lo que deberías hacer, ya que estamos programando con Typescript, es crear interfaces (mi preferencia) y tipar tus datos. Solo un ejemplo de prueba aquí:

export interface MyInterface {
  userName: string;
  password: string;
}

y la función:

authUser(user: MyInterface) {
  let users : MyInterface[] = [];
  users = JSON.parse(localStorage.getItem('Users')) || [];
  return users.find(u => u.userName === user.userName && u.password === user.password)
}

También revisa la función, puedes simplemente hacer:

users = JSON.parse(localStorage.getItem('Users')) || [];