web-dev-qa-db-fra.com

Pourquoi TypeScript déduit-il le type «jamais» lors de la réduction d'un tableau avec concat?

Le code parle mieux que la langue, donc:

['a', 'b', 'c'].reduce((accumulator, value) => accumulator.concat(value), []);

Le code est très idiot et renvoie un tableau copié ...

TS se plaint de l'argument de concat: TS2345: L'argument de type 'chaîne' n'est pas assignable au paramètre de type 'ConcatArray'.

14
pirix-gh

Je pense que c'est parce que le type de [] est supposé être never[], qui est le type d'un tableau qui DOIT être vide. Vous pouvez utiliser un cast de type pour résoudre ce problème:

['a', 'b', 'c'].reduce((accumulator, value) => accumulator.concat(value), [] as string[]);

Normalement, ce ne serait pas vraiment un problème car TypeScript fait un travail décent pour trouver un meilleur type à attribuer à un tableau vide en fonction de ce que vous en faites. Cependant, étant donné que votre exemple est "idiot" comme vous le dites, TypeScript ne peut faire aucune inférence et laisse le type comme never[].

18
Matt H