Microsoft propose l'introduction d'une syntaxe de type dans JavaScript

Par:
fredericmazue

ven, 11/03/2022 - 11:51

Microsoft a officiellement déposé une proposition pour introduire une syntaxe de type dans ECMAScript, le standard officiel de JavaScript. Pour justifier sa proposition, Microsoft souligne que le typage statique est la fonctionnalité qui a été la plus demandée dans les enquêtes State of JS Survey de 2020 et 2021.

Toutefois, ce n'est pas un typage statique de Microsoft propose, mais une syntaxe qui s'apparente plus à des annotations. L'idée de cette proposition est que JavaScript pourrait créer un ensemble de syntaxes pour des types que les moteurs ignoreraient entièrement , mais que des outils comme TypeScript, Flow et d'autres pourraient utiliser. Cela permettrait de conserver les choses qui sont des atouts de TypeScript pour Redmond - l'expérience de vérification de type et d'édition - tout en supprimant la nécessité d'une étape de construction dans le développement. Ainsi, lorsqu'il s'agit d'écrire et d'exécuter du code, la boucle interne d'un développeur serait un peu différente.

Microsoft tient à souligner ce que sa proposition n'est pas. Il ne s'agit pas de mettre la vérification de type de TypeScript dans chaque navigateur et runtime JavaScript. Il ne s'agit pas non plus d'un nouveau vérificateur de type à mettre dans le navigateur. Microsoft propose simplement une syntaxe compatible et motivée par TypeScript, qui pourrait être utilisée par n'importe quel vérificateur de type, mais qui serait ignorée par les moteurs JavaScript. 

Les annotations de type proposées par Microsoft permettent à un développeur d'indiquer explicitement à quel type une variable ou une expression est destinée. Les annotations suivent le nom ou le modèle de liaison d'une déclaration. Ils commencent par un : et sont suivis du type réel. Par exemple:

let  x : string ;
x  =  "bonjour" ;
x  =  100 

Dans cet exemple, x est annoté avec le type string. Des outils tels que TypeScript peuvent utiliser ce type et peuvent choisir de signaler une erreur sur l'instruction x = 100. Cependant, un moteur JavaScript qui implémenterait la proposition de Microsoft exécuterait ici chaque ligne sans erreur. En effet, les annotations ne modifient pas la sémantique d'un programme et sont équivalentes à des commentaires.

Des annotations peuvent également être placées sur des paramètres pour spécifier les types qu'ils acceptent, et après la fin d'une liste de paramètres pour spécifier le type de retour d'une fonction :

function equals(x: number, y: number): boolean {
    return x === y;
}

Cette proposition permettrait aussi aux membres de classe, comme les déclarations de propriété et les déclarations de champs privés, de spécifier des annotations de type :

class Person {
    name: string;
    constructor(name: string) {
        this.name = name;
    }

    getGreeting(): string {
        return `Hello, my name is ${this.name}`;
    }
}

La proposition de Microsoft est publiée sur GitHub