• Empleos
  • Sobre nosotros
  • profesionales
    • Inicio
    • Empleos
    • Cursos y retos
  • empresas
    • Inicio
    • Publicar vacante
    • Nuestro proceso
    • Precios
    • Evaluaciones
    • Nómina
    • Blog
    • Comercial
    • Calculadora de salario

0

205
Vistas
¿Cómo usar el encadenamiento opcional con matriz o funciones?

Estoy tratando de usar el encadenamiento opcional con una matriz en lugar de un objeto, pero no estoy seguro de cómo hacerlo:

Esto es lo que intento hacer myArray.filter(x => x.testKey === myTestKey)?[0] . También intento algo similar con una función:

 let x = {a: () => {}, b: null} console.log(x?b());

Pero está dando un error como ese, así que cómo usarlo con una matriz o una función.

about 3 years ago · Santiago Trujillo
3 Respuestas
Responde la pregunta

0

Tienes que poner un . después de la ? para usar el encadenamiento opcional:

 myArray.filter(x => x.testKey === myTestKey)?.[0]

Enlace del patio de recreo

Usando solo el ? solo hace que el compilador piense que está tratando de usar el operador condicional (y luego arroja un error ya que no ve un : más tarde)

El encadenamiento opcional no es solo una cosa de TypeScript, también es una propuesta terminada en JavaScript simple .

Se puede usar con notación de corchetes como la anterior, pero también se puede usar con acceso a propiedades de notación de puntos:

 const obj = { prop2: { nested2: 'val2' } }; console.log( obj.prop1?.nested1, obj.prop2?.nested2 );

Y con llamadas a funciones:

 const obj = { fn2: () => console.log('fn2 running') }; obj.fn1?.(); obj.fn2?.();

about 3 years ago · Santiago Trujillo Denunciar

0

Acabo de encontrarlo después de buscar un poco en la página de novedades en la documentación oficial .

La forma correcta de hacerlo con una matriz es agregar . despues ?

entonces será como

 myArray.filter(x => x.testKey === myTestKey)?.[0]

Me gustaría arrojar algo más de luz sobre lo que sucede exactamente con mi caso de pregunta anterior.

 myArray.filter(x => x.testKey === myTestKey)?[0]

Transpila a

 const result = myArray.filter(x => x.testKey === myTestKey) ? [0] : ;

Debido a lo cual arroja el error ya que falta algo después: y probablemente no desee que su código se transfiera a esto.

Gracias a la respuesta de Certain Performance, aprendí cosas nuevas sobre TypeScript, especialmente la herramienta https://www.typescriptlang.org/play/index.html .

about 3 years ago · Santiago Trujillo Denunciar

0

ECMA 262 (2020), que estoy probando en Edge Chromium 84, puede ejecutar el operador de encadenamiento opcional sin transpiler de TypeScript:

 // All result are undefined const a = {}; console.log(a?.b); console.log(a?.["b-foo-1"]); console.log(a?.b?.()); // Note that the following statements throw exceptions: a?.(); // TypeError: a is not a function a?.b(); // TypeError: a?.b is not a function

Puede usar: Chrome 80+, Firefox 74+

about 3 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Nuestro proceso Comercial
Legal
Términos y condiciones Política de privacidad
© 2025 PeakU Inc. All Rights Reserved.

Andres GPT

Recomiéndame algunas ofertas
Necesito ayuda