Es una técnica que se usa sobre todo en los parámetros de una función. Consiste en que por medio de validaciones podamos modificar el flujo de la función dependiendo si sus parámetros aceptan varios tipos de datos a la vez mediante uniones de tipos.
La forma más común de Narrowing se observa usando el operador typeof
y condicionales, de este manera podemos controlar cómo actuará esa función de manera controlada y evitando bugs.
Veamos algunos ejemplos para comprender todo esto.
//creamos una tupla de strings
const choices: [string, string] = ['NO', 'YES'];
const processAnswer = (answer: number | boolean) => {
if (typeof answer === 'number') {
console.log(choices[answer]);
} else if (typeof answer === 'boolean') {
if (answer) {
console.log(choices[1]);
} else {
console.log(choices[0]);
}
}
}
processAnswer(0); // Prints "NO"
processAnswer(true); // Prints "YES"
Analicemos la función processAnswer
, sólo recibe un parámetro answer
que puede ser number
o boolean
.
Si
answer
esnumber
:
Accedemos a la tuplachoices
en la posición que le pasemos, siendochoices[0] = 'NO'
ychoices[1] = 'SI'
; ergo, si llamamos a la funciónprocessAnswer(0)
obtendremos como salidaNO
.Si
answer
esboolean
:
Sianswer
existe entonces regresamoschoices[1]
, oseaSI
.
Sianswer
no existe entonces regresamoschoices[0]
oseaNO
.
¿Bastante fácil verdad?
Veamos otro ejemplo:
function roughAge(age: number | string) {
if (typeof age === 'number') {
// In this block, age is known to be a number
console.log(Math.floor(age));
} else {
// In this block, age is known to be a string
console.log(age.split(".")[0]);
}
}
roughAge('3.5'); // Prints "3"
roughAge(3.5); // Prints 3
La función roughAge
recibe un solo parámetro age
, nuevamente evaluamos que hará:
Si
age
esnumber
redondeamos el valor hacia abajo conMath.floor()
, por ello llamarroughAge(3.5)
regresa el número3
.Si
age
esstring
usamos el métodosplit
de las cadenas y obtenemos la primera posición de dicha cadena. Por ello si llamamosroughAge('3.5')
obtenemos'3'
comostring
.
Conclusiones
- Narrowing es un técnica muy poderosa y sencilla de comprender para que el flujo de las funciones hagan lo que nosotros necesitamos.
- Usualmente
typeof
será nuestro mejor aliado al momento de hacer Narrowing.
Top comments (0)