Resumen

Los parámetros opcionales son aquellos que podemos obviar su envío cuando mandamos datos en una función que requiere argumentos.

El nullish-coalescing nos permite evaluar si una variable está definida, pero si esta es null o undefined, retorna un segundo valor diferente.

Parámetros opcionales en TypeScript

Para denotar que un parámetro será opcional usamos el operador ? al lado. Siempre debemos colocar los parámetros opcionales al final.

const createProduct = ( id: string | number, // Puede ser de tipo `string` o `number`. isNew: boolean, stock?: number, // PARÁMETRO OPCINAL. ) => { return { // Retornamos un objeto con los valores pasados como parámetros. id, stock, isNew } } console.log( createProduct(1, true) ) // { id: 1, stock: undefined, isNew: true }

Valores por defecto con el operador OR

Para evitar tener como retorno valores undefined podríamos emplear el operador lógico || (OR) para asignar un valor por defecto.

const createProduct = ( id: string | number, // Puede ser de tipo `string` o `number`. isNew?: boolean, // PARÁMETRO OPCINAL. stock?: number, // PARÁMETRO OPCINAL. ) => { return { // Retornamos un objeto con los valores pasados como parámetros. id, stock: stock || 10, isNew } } console.log( createProduct(1, true) ) // { id: 1, stock: undefined, isNew: true }

El problema de usar valores falsy en JavaScript

El operador || evalúa si el primer valor es falsy, de serlo retorna un segundo valor, si no es falsy retorna el primero. Los valores que son considerados falsy en JavaScript son:

  • String vacío “”
  • Número 0
  • El valor booleano false

Aquí surge un problema: si nosotros deseáramos mandar como argumento un valor que JavaScript considera falsy, entonces el operador || no tomará en cuenta nuestros valores y los cambiará por los de defecto:

const createProduct = ( id: string | number, // Puede ser de tipo `string` o `number`. isNew?: boolean, // PARÁMETRO OPCINAL. stock?: number, // PARÁMETRO OPCINAL. ) => { return { // Retornamos un objeto con los valores pasados como parámetros. id, stock: stock || 10, isNew: isNew || true } } console.log( createProduct(1, false, 0) ) // { id: 1, stock: 10, isNew: true } // 👆 JavaScript retorna los valores por defecto de `isNew` y `stock` // y no los que mandamos en los argumentos.

Este problema podemos solucionarlo con el nullish-coalescing.

Nullish-coalescing para asignar valores por defecto

El nullish-coalescing se representa con el operador ??. Esto evalúa si el primer valor está definido, si no lo está, retorna el segundo:

const createProduct = ( id: string | number, // Puede ser de tipo `string` o `number`. isNew?: boolean, // PARÁMETRO OPCINAL. stock?: number, // PARÁMETRO OPCINAL. ) => { return { // Retornamos un objeto con los valores pasados como parámetros. id, stock: stock ?? 10, isNew: isNew ?? true } } console.log( createProduct(1, false, 0) ) // { id: 1, stock: 0, isNew: false }

Contribución creada por: Martín Álvarez (Platzi Contributor).