Tengo una función que detecta si un tipo podría ser un número y lo cambia a Float siempre que sea posible, esto es muy útil para mí cuando obtengo datos convertidos de csv a JSON que encadenan todo.
const possibleNum: string | number = '3' export const changeType = (entry: string | number) => { return !isNaN(parseFloat(entry)) ? parseFloat(entry) : entry } const res = changeType(possibleNum) console.log(typeof res) // numberEsto funciona bien con JavaScript normal, pero TypeScript no lo tiene.
yo obtengo
`Argument of type 'string | number' is not assignable to parameter of type 'string'. Type 'number' is not assignable to type 'string'.ts(2345)`¿Cómo puedo hacerlo?
El compilador no puede entender si se refiere a string o un number en parseFloat . Puede agregar otra condición if para que el compilador sepa que su tipo en parseFloat es una string 100%.
const posibleNum: string | number = '3' const changeType = (entry: string | number) => { if(typeof entry === "number") { return entry } const parsedEntry = parseFloat(entry) return !isNaN(parsedEntry) ? parsedEntry : entry } const res = changeType(posibleNum) console.log(typeof res)Gracias a la respuesta de Nick Vu me di cuenta de que también podía hacer esto:
parseFloat(entry as string)
const possibleNum: string | number = '3' const changeType = (entry: string | number) => { const parseEntry = parseFloat(entry as string) return !isNaN(parseEntry) ? parseEntry : entry } const res = changeType(possibleNum) console.log(typeof res)