IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)

Vous êtes nouveau sur Developpez.com ? Créez votre compte ou connectez-vous afin de pouvoir participer !

Vous devez avoir un compte Developpez.com et être connecté pour pouvoir participer aux discussions.

Vous n'avez pas encore de compte Developpez.com ? Créez-en un en quelques instants, c'est entièrement gratuit !

Si vous disposez déjà d'un compte et qu'il est bien activé, connectez-vous à l'aide du formulaire ci-dessous.

Identifiez-vous
Identifiant
Mot de passe
Mot de passe oublié ?
Créer un compte

L'inscription est gratuite et ne vous prendra que quelques instants !

Je m'inscris !

TypeScript 2.9 est disponible et intègre plusieurs nouveautés,
Le langage continue de compléter son système de typage

Le , par yahiko

170PARTAGES

5  0 
Les nouveautés dans TypeScript 2.9
Le langage continue de compléter son système de typage


Une nouvelle version du compilateur TypeScript vient de sortir. Ce surensemble typé de JavaScript poursuit sa maturation en proposant toujours plus de possibilités tant au niveau de la syntaxe qu’au niveau de son intégration avec les environnements de développement.

Pour installer cette nouvelle version, il vous suffit de taper la commande suivante :
npm install -g typescript

Il convient de s’assurer que votre environnement de développement prend bien en compte cette nouvelle version.

import() typé

Il est désormais possible d’utiliser l’importation de type en plein milieu du code. Il n’est donc plus obligatoire de réaliser l’importation en début de module.

Code : Sélectionner tout
1
2
3
4
5
6
7
8
9
10
11
12
// foo.ts
export interface Person {
    name: string;
    age: number;
}

// bar.ts
export function greet(p: import("./foo").Person) {
    return `
        Hello, I'm ${p.name}, and I'm ${p.age} years old.
    `;
}
Dans le code ci-dessus, le type Person est importé à la volée dans le source bar.ts à partir de foo.ts.

Inférence de types à partir de JSON

L’inférence de types peut désormais s’appliquer aux fichiers JSON importés, ce qui permet entre autres de détecter des erreurs de typage lors de modifications de valeurs sur les propriétés de l’objet JSON. Ce comportement est optionnel et doit s’activer avec le paramètre resolveJsonModule dans le fichier tsconfig.json. À noter aussi que ce comportement ne s’applique qu’avec une résolution de module de type node (paramètre "module" = "commonjs")

Code : Sélectionner tout
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
// ./tsconfig.json
{
    "compilerOptions": {
        "module": "commonjs",
        "resolveJsonModule": true,
        "esModuleInterop": true
    }
}

// ./src/settings.json
{
    "dry": false,
    "debug": false
}

// ./src/foo.ts
import settings from "./settings.json";

settings.debug === true;  // Okay
settings.dry === 2;       // Error! Can't compare a `boolean` and `number`

Généricité pour les étiquettes des patrons de chaîne (tagged template strings)


La version 2.9 permet d’utiliser des fonctions génériques pour les étiquettes de patrons de chaînes, fonctions auxquelles il est possible de fournir des paramètres de type.

Code : Sélectionner tout
1
2
3
declare function tag<T>(strs: TemplateStringsArray, ...args: T[]): T;

let a = tag<string | number> `${100} ${"hello"}`;

Support des symboles et des numériques pour keyof

Le mot-clé keyof ne pouvait récupérer que les propriétés dont le nom était un littéral alphanumérique. Il peut à présent renvoyer les propriétés dont le nom est un numérique (par exemple les indices d’un tableau) ou même un symbole (symbol).

Code : Sélectionner tout
1
2
3
4
5
6
7
8
9
10
11
const baz = Symbol("baz");

interface Thing {
    foo: string;
    bar: number;
    [baz]: boolean; // this is a computed property type
}

// Error in TypeScript 2.8 and earlier!
// `typeof baz` isn't assignable to `"foo" | "bar"`
let x: keyof Thing = baz;
Propagation du renommage et du déplacement de fichiers

Enfin, parmi les nouveautés majeures dans cette version de TypeScript, mentionnons que le renommage ou le déplacement des fichiers sources dans un projet peut entraîner la mise à jour des références à ces fichiers sources dans les instructions import. Toutefois, tous les éditeurs ne prennent pas encore en compte cette possibilité.

Source : blog Microsoft

Que pensez-vous de ces nouveautés ?
En attendiez-vous d'autres ?

Voir aussi :
Microsoft annonce la disponibilité de TypeScript 2.9 RC, qui s'accompagne de la prise en charge des symboles et des littéraux numériques dans keyof
TypeScript 2.8 est disponible et s'accompagne des types conditionnels, ainsi que du contrôle granulaire sur les modificateurs de type mappés

Une erreur dans cette actualité ? Signalez-nous-la !

Avatar de grunk
Modérateur https://www.developpez.com
Le 04/06/2018 à 8:57
Il est désormais possible d’utiliser l’importation de type en plein milieu du code. Il n’est donc plus obligatoire de réaliser l’importation en début de module.
Là comme ça , avec l'exemple donné, ca semble pas êtr eun truc que j'encouragerais :/
Ça me parait quand même vachement plus clair d'avoir tous ses import en début de script que disséminé un peu partout
4  0 
Avatar de Psycha
Membre régulier https://www.developpez.com
Le 04/06/2018 à 13:33
Hum ça me fait poser la question de l'import runtime, je sais pas si c'est possible, mais si c'est le cas ça donne l'impression de pouvoir faire un sorte de polymorphisme de type (dépendant de l'environnement par exemple?).
0  0 
Avatar de yahiko
Rédacteur/Modérateur https://www.developpez.com
Le 04/06/2018 à 20:21
@grunk : je ne suis pas loin de partager ton avis, mais disons que c'est une possibilité offerte. Les gens peuvent l'utiliser, ou pas. Il faut bien avoir à l'esprit que de toute manière, il n'y a pas de code JS généré, puisqu'on reste sur du typage. C'est juste une possibilité syntaxique "décorative".

@Psycha : Il existe déjà des moyens non ECMAScript pour importer dynamiquement des modules. Sinon, il faut attendre l'import dynamique --- import() --- qui ne devrait pas tarder à arriver.
0  0 
Avatar de AoCannaille
Expert confirmé https://www.developpez.com
Le 05/06/2018 à 10:23
Citation Envoyé par grunk Voir le message
Là comme ça , avec l'exemple donné, ca semble pas êtr eun truc que j'encouragerais :/
Ça me parait quand même vachement plus clair d'avoir tous ses import en début de script que disséminé un peu partout
C'est une question de point de vue. En C++, le using namespace est limité au block. certains les préfèrent en haut du fichier, mais si ce n'est utile que dans une fonction ou une classe, autant le mettre directement à cet endroit. Si ça devient inutile, il est plus aisé de penser à le retirer.
0  0