web-dev-qa-db-fra.com

Comment convertir en tableau dans TypeScript 2?

J'avais du code qui convertissait un objet en tableau (pour pouvoir utiliser des fonctions de tableau sur l'objet sans erreur de compilation).

    var n = (result.data['value'] as []).map( (a)=>{
      //..
    });

Mais lors de la mise à niveau vers ts2, je reçois:

erreur TS1122: une liste d'éléments de type Tuple ne peut pas être vide.

Ce qui est en fait une erreur de syntaxe, prétendant que vous avez oublié une virgule ou une valeur. Alors, comment puis-je modifier ce cast pour fonctionner correctement?

J'ai essayé as [IMyType] et cela a fonctionné, mais je préférerais ne pas spécifier le type puisque je n'ai besoin que des fonctions array.prototype ici ... aussi, je ne pense pas que ce soit comme ça que vous le fassiez. 

6
FlavorScape

Pour une raison quelconque, le compilateur pense que result.data['value']est un tuple et non un tableau. 

Vous pouvez le lancer comme ceci:

result.data['value'] as any[]

Ce qui devrait indiquer au compilateur que c'est un tableau, ou:

result.data['value'] as Array<any>

Si votre tableau ne contient que des éléments de type IMyType, alors simplement:

result.data['value'] as IMyType[]

Cependant, si votre tableau contient des éléments de types différents, il s’agit d’un any[] ou d’un tuple, par exemple:

result.data['value'] as [IMyType, string, string]

Dans tous les cas, dans le JS compilé, ce sera un tableau, mais les n-uplets vous permettent de définir des tableaux de longueur fixe avec des types spécifiques.

13
Nitzan Tomer

Vous ne lancez pas dans un tableau.

[string] est un tuple avec un seul élément string

[string, string] est un tuple avec deux éléments, string et string

[] est un tuple avec zéro élément.

La syntaxe pour un tableau de chaînes est string[]

Ce que vous voulez probablement, c'est result.data['value'] as any[].

6
cdbajorin

Alternativement aux options de syntaxe de conversion précédentes mentionnées ci-dessus, vous pouvez également effectuer les opérations suivantes:

var n = (<SampleType[]>result.data['value']).map((a) => {
    //..
});
1
Gorka Hernandez