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.
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.
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[]
.
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) => {
//..
});