Búsqueda de sitios web

react native - Error de encadenamiento opcional en Typescript: Se esperaba una expresión.ts(1109)


Estoy intentando hacer encadenamiento opcional en Typescript + React Native.

Digamos que tengo las siguientes interfaces:

interface Bar {
  y: number
}

interface Foo {
  x?: Bar
}

y trato de ejecutar lo siguiente:

 const test: Foo = {x: {y: 3}};
 console.log(test.x?.y);

VSCode mostrará un error bajo ?. diciendo lo siguiente: Se esperaba una expresión.ts(1109)

¿Tienes alguna idea de por qué está pasando esto o cómo debería arreglarlo? Gracias.

Respuesta #1

TypeScript 3.7 ha sido lanzado, pero el VS Code estable usa una versión más antigua.

Prueba ⌘ + Shift + p y elige Select TypeScript Version. Si no es 3.7 o superior, ese es el problema. La solución más fácil es instalar la extensión ms-vscode.vscode-typescript-next. Proporcionará una versión nightly de TypeScript para que VS Code la use (puede requerir reiniciar VS Code, para tu información).

Querrás recordar quitar la extensión cuando VS Code tenga TypeScript 3.7+ por defecto.

Consulta https://code.visualstudio.com/docs/typescript/typescript-compiling#_using-newer-typescript-versions para más detalles.

Respuesta #2

Para aquellos que se estén preguntando, la encadenación opcional (el operador ?) está ahora disponible en TypeScript 3.7 (Beta), desde octubre de 2019. Puede instalar esa versión ejecutando el siguiente comando:

npm install typescript@beta

Así es como puede usar el operador, como se explica en las notas de la versión.

let x = foo?.bar.baz();

Que es equivalente a

let x = (foo === null || foo === undefined) ?
    undefined :
    foo.bar.baz();

Aparte del encadenamiento opcional, otras características interesantes incluyen la fusión nula (el operador ??).

Actualización (noviembre de 2019)

El encadenamiento opcional de TypeScript ya está disponible oficialmente. Instalar la última versión de TypeScript debería permitirte acceder a las nuevas funciones geniales.

npm install typescript

Para aquellos que están usando VS Code, por favor consulten la excelente respuesta de Austin sobre cómo hacer que funcione con la nueva versión de TypeScript.

Para aquellos que estén trabajando con WebStorm, necesitarán configurar TypeScript para usar la versión de TypeScript instalada en su proyecto.

Preferences -> Languages & Frameworks -> TypeScript

Además, si estás usando una versión más antigua de WebStorm, podrías enfrentar un error/advertencia cuando intentes usar el operador de fusión nula (??). Para solucionar esto, necesitarás instalar WebStorm 2019.2.4, o cualquier versión que sea más reciente que la mencionada.

Artículos relacionados