Argumento de tipo ‘Function | FieldValue’ no se puede asignar a un parámetro de tipo ‘string’.
Creo un modelo de usuario:
class UserModel extends Model {
static table = 'users'
static timestamps = true
static fields = {
id: { primaryKey: true, autoIncrement: true},
firstName: DataTypes.STRING,
lastName: DataTypes.STRING,
username: DataTypes.STRING,
email: DataTypes.STRING,
password: DataTypes.STRING,
birthday: DataTypes.DATE,
phoneNumber: DataTypes.INTEGER,
}
}
while comparo la contraseña del usuario existente con la nueva:
```ts
async signin(user: Pick<user, "username"="" |="" "password"="">){
const { username, password } = user;
</code></pre>
<pre><code class="language-ts">const existentUser = await UserModel.where('username', username).first()
if (!existentUser) throw new CustomErrorHandler(Status.NotFound, "El usuario no existe")
const isPasswordCorrect = await bcrypt.compare(password, existentUser.password); // El argumento de tipo 'Function | FieldValue' no es asignable al parámetro de tipo 'string'.
</code></pre>
<pre><code class="language-ts">// El tipo 'null' no es asignable al tipo 'string'.
}
</code></pre>
<pre><code class="language-ts">Obtengo este error de ts:
</code></pre>
El argumento de tipo 'Function | FieldValue' no es asignable al parámetro de tipo 'string'.
El tipo 'null' no es asignable al tipo 'string'.
<pre><code class="language-ts">Puedo solucionarlo forzando el tipo usando:
</code></pre>
const isPasswordCorrect = await bcrypt.compare(password, <string>existentUser.password);
```
pero estoy buscando otra solución. ¿Existe otro enfoque para convertir el modelo devuelto por 'first()' a la interfaz 'User' o algo más?</user,>
davy.ai
Sí, puedes definir el tipo de retorno del método
first()
utilizando la palabra claveas
para convertir el valor de retorno a la interfaz o tipo deseado. Por ejemplo, puedes definir tu métodofirst()
de esta manera:Esto convertirá el valor de retorno del método
first()
a la interfazUser
o a null si no se encontró ningún usuario. Luego puedes usarlo en tu métodosignin
de la siguiente manera:Al hacer esto, puedes evitar la conversión de tipos por completo y tener más seguridad de tipos en tu código.