web-dev-qa-db-fra.com

Quelle est l'utilisation du type astérisque (*) dans Flow et quel est l'équivalent de cela dans TypeScript?

Tout d’abord, je connais surtout TypeScript. Flow ressemble beaucoup à TS à bien des égards, mais je suis récemment tombé sur un astérisque (*). Au début, je pensais que c'était un synonyme de "tout", mais maintenant, après avoir lu certaines des notes de publication de Flow, je constate que ce n'est pas le cas. J'ai parcouru tous les documents officiels et je n'ai pas trouvé d'utilisation de "*".

Alors, de quoi s'agit-il et quand l'utiliser? Mais aussi, quel serait un équivalent direct de cela dans TypeScript?

21
NeverwinterMoon

Cela indique simplement à Flow d'inférer un paramètre de type, plutôt que de vous l'écrire explicitement:

function foo(): Array<*> {
  return [5];
}

// Flow issues an error:
//    2:   return [5];
//                 ^ number. This type is incompatible with
//    10: (foo(): Array<string>);
//                     ^ string
(foo(): Array<string>);

( essayez le flux )

Il est différent de any - any est un type dangereux, donc si vous avez remplacé * par any dans cet exemple, Flow ne vous signalera aucune erreur. Vous pouvez le remplacer par number et Flow vous donnerait une erreur similaire.

20
Nat Mote

L'astérisque * dans Flow lui dit d'inférer le type, auquel déjà répondu par Nat Mote

De plus, TypeScript n'a pas d'équivalent direct pour l'astérisque et par conséquent, il est impossible de lui demander d'inférer un type. Toutefois, comme Flow, il en déduit automatiquement des types dans certains cas spécifiques. Documentation TypeScript Type Inference , Exemples d'inférences de type

Consultez unique features sur cette page: Différences entre Flow et TypeScript

2
Nicholas Tancredi

Pas assez de réputation pour poster un commentaire.

Mise à jour dans TypeScript 2.8:

https://www.typescriptlang.org/docs/handbook/advanced-types.html#type-inference-in-conditional-types

donc vous pouvez avoir T<*> (flux) être dans TypeScript T<infer U>. Je suis nouveau dans TypeScript, corrigez-moi si je me trompe.

0
FSNXW