Novedades en TypeScript 3.7

La versión 3.7 de TypeScript viene repleta de novedades. Lo primero que debes saber, como siempre, es que si quieres usar esta versión puedes hacerlo a través del comando:

npm install -g typescript@latest

Esta versión se caracteriza por añadir características de ECMAScript para tratar valores null y undefined. Sin más, comencemos a resumir de forma muy breve las novedades más importantes que presentará esta nueva versión.

Optional Chaining

El encadenamiento opcional nos permite leer cada una de las propiedades dentro de una cadena de objetos sin tener que incluir condiciones que validen que cada una de sus referencias son correctas. Viene representado por el operador ?

Si tenemos en cuenta el siguiente fragmento de código, extraído del blog oficial de TypeScript, podemos ver exactamente cómo funciona esta nueva característica:

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

En esta situación, si foo está definido la operación se llevará a cabo, pero si es null o undefined el programa se interrumpirá.

Como se indica en el código escrito previamente, usando el encadenamiento opcional sería como escribir esto:

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

Nullish Coalescing

Se trata de otra característica de ECMAScript que viene de la mano junto con la explicada con anterioridad. Sigue en la misma línea de gestionar valores cuando estos sean null o undefined. Podemos usarlo con el operador ??. Veámoslo con un sencillo ejemplo:

let x = foo ?? bar();

En este caso, vamos a usar el valor de foo cuando tengamos asignado un valor, pero cuando sea null o undefined vamos a realizar la operación bar() en su lugar. Esto nos permitirá tener siempre tener un valor u opción por defecto ante este tipo de situaciones.

Assertion functions

Conocido por estar ya introducido en otros lenguajes, se trata de una expresión cuya premisa va a ser siempre true y que, en caso contrario, lanzará una excepción:

function yell(str) {
    assert(typeof str === "string");

    return str.toUppercase();
    //         ~~~~~~~~~~~
    // error: Property 'toUppercase' does not exist on type 'string'.
    //        Did you mean 'toUpperCase'?
}

function assert(condition: any, msg?: string): asserts condition {
    if (!condition) {
        throw new AssertionError(msg)
    }
}

Estas serían las tres grandes novedades que presenta esta versión de TypeScript, no obstante, para obtener información más detallada, como he citado anteriormente, podéis consultar directamente el post oficial del anuncio donde se incluyen todas sus nuevas características entre las que se encuentra la posibilidad de usar –declaration and –allowJs conjuntamente (lo que facilitará la migración de tu proyecto a TypeScript) o el uso de Recursive Type Aliases, aunque en un futuro analizaremos más detalladamente alguna de ellas.

Happy coding!