En el tutorial de redux dice:
const canSave = Boolean(title) && Boolean(content) && Boolean(userId) const canSave = title && content && userIdSi usa TypeScript con title && content && userId expresión de ID de usuario, la evaluación de la expresión es una string , el TSC generará un error de discrepancia de tipo, vea el siguiente ejemplo:
import React, { useState } from 'react'; export default function Test() { const [title, setTitle] = useState(''); const [content, setContent] = useState(''); const [userId, setUserId] = useState(''); return <button disabled={title && content && userId}>click me</button>; }Error:
El tipo "cadena" no se puede asignar al tipo "booleano". '
Entonces necesitas convertir la cadena a booleana. Del documento booleano
No utilice un objeto
Booleanpara convertir un valor no booleano en un valor booleano. Para realizar esta tarea, en su lugar, useBooleancomo una función, o un operador NOT doble:
var x = Boolean(expression); // use this... var x = !!(expression); // ...or thisEntonces el código debería ser:
const canSave = Boolean(title) && Boolean(content) && Boolean(userId); // or const canSave = !!title && !!content && !!userId;Ambos están bien.
Sí, puedes, pero imagina que obtienes un resultado extraño para algunos valores del título. Imagina que alguien pone false en su título o contenido. Aunque no estoy seguro sobre el ID de usuario
Sería necesario tener que convertir a booleano explícitamente en el caso (probablemente un poco inusual) de que el resultado no se verifique por veracidad o falsedad, sino contra otro booleano. Para ilustrar, la siguiente lógica falla:
const title = ''; const content = 'content'; const userId = 'foo'; const canSave = title && content && userId; if (canSave === false) { console.log('cant save'); throw new Error(); } console.log('saving...'); Convertir canSave a booleano solucionará eso.
Pero un enfoque más SECO sería llamar a Boolean en el resultado completo, en lugar de en cada expresión individual.
const canSave = Boolean(title && content && userId);Pero userId = 0 luego se convertiría en falso
No estoy seguro de a qué te refieres. Si eso es un problema, ¿quizás la lógica que desea es typeof userId === 'number' ?