Przejdź do treści

Konwerter TypeScript na typy Flow — Numio

Konwertuje deklaracje typów TypeScript na typy Flow przy użyciu flowgen. readonly staje się znacznikiem wariancji +, eksportowane funkcje i klasy otrzymują "declare export", a enum stają się dokładnymi obiektami tylko do odczytu.

Publikujesz bibliotekę TypeScript i chcesz także dostarczać definicje Flow klientom korzystającym z Flow.

TypeScript

Flow

Kiedy go używać

  • Publikujesz bibliotekę TypeScript i chcesz także dostarczać definicje Flow klientom korzystającym z Flow.
  • Baza kodu Flow zależy od pakietu, który ma tylko typy .d.ts i na początek potrzebujesz libdef.

Jak używać

  1. Wklej deklaracje TypeScript (interfejsy, typy, deklaracje deklaracyjne, wyliczenia) lub moduł z kodem implementacyjnym do panelu TypeScript.
  2. Kod jest przetwarzany lokalnie w przeglądarce. Kod zawierający ciała funkcji lub inicjalizatory jest najpierw sprowadzany do deklaracji .d.ts przez kompilator TypeScript; następnie flowgen konwertuje i formatuje wynik.
  3. Skopiuj dane wyjściowe Flow, umieść je w folderze z typem przepływu lub w pliku .js.flow i uruchom flow, aby to sprawdzić.

TypeScript

export type Theme = "light" | "dark";

export interface ButtonProps {
  label: string;
  theme?: Theme;
  readonly disabled: boolean;
  onClick(event: MouseEvent): void;
}

export declare function render(props: ButtonProps): string;
export enum Size { Small, Large }

Przepływ

export type Theme = "light" | "dark";
export interface ButtonProps {
  label: string;
  theme?: Theme;
  +disabled: boolean;
  onClick(event: MouseEvent): void;
}
declare export function render(props: ButtonProps): string;

declare export var Size: {|
  +Small: 0, // 0
  +Large: 1, // 1
|};

Szczegóły i ograniczenia

Konwersja odbywa się lokalnie w Web Workerze w przeglądarce. Dane wejściowe nie są wysyłane na serwer konwersji. Wymagane moduły są pobierane przy pierwszym użyciu narzędzia.

Kod implementacyjny jest najpierw kompilowany do deklaracji, więc pozostaje tylko wpisany API: treść znika, wywnioskowane typy zwracane są wypełniane, a nieeksportowane wartości, których nie używa się do eksportu, są usuwane.

Aliasy typów obiektów stają się niedokładnymi obiektami Flow zakończonymi "..."; interfejsy pozostają interfejsami.

Wyliczenia numeryczne stają się zadeklarowanym dokładnym obiektem wartości literału tylko do odczytu, na przykład +Small: 0.

FAQ

W jaki sposób konwertowane są właściwości tylko do odczytu?

readonly disabled: boolean staje się +disabled: boolean, czyli kowariantnym znacznikiem właściwości Flow tylko do odczytu.

Czy mogę wkleić pełny plik .ts z implementacjami?

Tak. Lokalny kompilator najpierw emituje deklaracje, więc funkcja strzałkowa bez adnotacji otrzymuje wywnioskowany typ, np. declare export var greet: (u: User) => string. Błędy składni są zgłaszane zamiast konwersji.

Czy obsługiwane są wyliczenia TypeScript?

Tak, zgodnie z deklaracją eksportu var Nazwa: {| +Członek: wartość |}. Wyliczenia przepływów nie są generowane.

Specyfikacje i referencje