web-dev-qa-db-fra.com

Comment exporter une définition de type Flow importée d'un autre fichier?

Étant donné qu'une définition de type est importée d'un autre module, comment la réexporter?

/**
 * @flow
 */

import type * as ExampleType from './ExampleType';

...

// What is the syntax for exporting the type?
// export { ExampleType };
16
ide

La forme la plus simple de cette question est "comment exporter un alias de type?" et la réponse simple est "avec export type!"

Pour votre exemple, vous pouvez écrire

/**
 * @flow
 */

import type * as ExampleType from './ExampleType';
export type { ExampleType };

Vous pouvez vous demander "pourquoi ExampleType est-il un alias de type?" Eh bien, quand vous écrivez

type MyTypeAlias = number;

Vous créez explicitement le type alias MyTypeAlias, lequel alias number. Et quand tu écris

import type { YourTypeAlias } from './YourModule';

Vous créez implicitement le type alias YourTypeAlias qui alias l’export YourTypeAlias de YourModule.js.

27
Gabe Levi

Cela fonctionne

export type { MyType } from './types';

Edit: Obtenir cette syntaxe à partir de la manière dont elle est utilisée dans react-native-tab-view

9
locropulenton

La réponse acceptée est ancienne et jette des avertissements de ma part. Compte tenu du nombre de vues, voici une réponse mise à jour compatible avec le flux 0.10+. 

MyTypes.js:

  export type UserID = number;
  export type User = {
    id: UserID,
    firstName: string,
    lastName: string
  };

User.js:

  import type {UserID, User} from "MyTypes";

  function getUserID(user: User): UserID {
    return user.id;
  }

la source

5
Gunther

Je viens de trouver qu'il est nécessaire que one-liner effectue cela pour les classes par défaut ES6, en s'appuyant sur la réponse de @ locropulenton. Supposons que vous ayez

// @flow

export default class Restaurants {}

dans un fichier Restaurants.js. Pour l'exporter d'un fichier index.js du même répertoire, procédez comme suit:

export type {default as Restaurants} from './Restaurants';
0
James Ko