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
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ć
- Wklej deklaracje TypeScript (interfejsy, typy, deklaracje deklaracyjne, wyliczenia) lub moduł z kodem implementacyjnym do panelu TypeScript.
- 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.
- 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.