TypeScript 2.7

Par:
fredericmazue

jeu, 01/02/2018 - 15:43

Microsoft vient d'annoncer la disponibilité du langage TypeScript en version 2.7 finale. L'annonce de Microsoft récapitule les nouveautés du langage pour cette mouture, parmi lesquelles nous retenons la lutte contre les entités non initialisées.

Pour cela arrive un nouveau commutateur pour le compilateur : --strictPropertyInitialization. Sa présence assure que chaque propriété d'instance d'une classe est initialisée lors de la construction de l'objet. Par exemple :

class C {
    foo: number;
    bar = "hello";
    baz: boolean;
//  ~~~
//  Error! Property 'baz' has no initializer and is not assigned directly in the constructor.
    constructor() {
        this.foo = 42;
    }
}

Ici le compilateur retourne une erreur car la propriété 'baz' n'est pas initialisée. Les développeurs têtus peuvent malgré tout imposer que la propriété baz reste à undefined en la déclarant ainsi :

baz : boolean | undefined;

Des scenarios peuvent requérir qu'une propriété soit initialisée indirectement, hors déclaration ou constructeur, par exemple par une méthode. Dans ce cas, le développeur utilisera 'l'assertion d'assignation définie'. Par exemple :

class C {
    foo!: number;
    // ^
    // Notice this exclamation point!
    // This is the "definite assignment assertion" modifier.
    constructor() {
        this.initialize();
    }

    initialize() {
        this.foo = 0;
    }
}

Remarquer la présence du point d'exclamation dans la déclaration de la propriété 'foo'.

Cette assertion d'assignation définie peut être utilisée en dehors d'une classe. Par exemple :

let x!: number[];
initialize();
x.push(4);

function initialize() {

    x = [0, 1, 2, 3];

}

Microsoft recommande de garder à l'esprit que le commutateur --strictPropertyInitialization  est activé en compagnie des autres commutateurs --strict. Ce qui peut impacter votre projet.

--strictPropertyInitialization peut être désactivé dans le fichier de configuration du compilateur tsconfig. json ou en donnant explicitement --strictPropertyInitialization false dans la ligne de commande qui invoque le compilateur.