Konwerter Flow na deklaracje TypeScript — Numio
Konwertuje kod przepływu na TypeScript za pomocą flow-to-ts, a następnie emituje tylko plik deklaracji .d.ts za pomocą kompilatora TypeScript. Obiekty zostaną usunięte, a parametry z wartościami domyślnymi staną się opcjonalne.
Pakiet jest napisany w Flow i chcesz wysłać typy TypeScript dla konsumentów TypeScript bez migracji źródła.
Flow
TypeScript Declarations
Kiedy go używać
- Pakiet jest napisany w Flow i chcesz wysłać typy TypeScript dla konsumentów TypeScript bez migracji źródła.
- Chcesz porównać wyeksportowany moduł API z modułem Flow z jego odpowiednikiem TypeScript.
Jak używać
- Wklej moduł Flow do panelu Flow.
- Lokalny konwerter z opcją declarationOnly przekształca kod na TypeScript i emituje deklaracje w przeglądarce.
- Skopiuj wynik z panelu deklaracji TypeScript do pliku index.d.ts obok punktu wejścia pakietu.
Przepływ
// @flow
export type Point = { x: number, y: number };
export type Shape = 'circle' | 'square';
export type Label = ?string;
export const ORIGIN: Point = { x: 0, y: 0 };
export function distance(a: Point, b: Point = ORIGIN): number {
return Math.hypot(a.x - b.x, a.y - b.y);
}
export class Canvas {
shapes: Shape[] = [];
draw(shape: Shape, at?: Point): void { this.shapes.push(shape); }
}Deklaracje TypeScript (.d.ts)
export type Point = {
x: number
y: number
}
export type Shape = "circle" | "square"
export type Label = string | null | undefined
export declare const ORIGIN: Point
export declare function distance(a: Point, b?: Point): number
export declare class Canvas {
shapes: Shape[]
draw(shape: Shape, at?: Point): void
}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.
Pliki bibliotek TypeScript ES2020 i DOM są ładowane, więc Array<T>, Promise, Date i $ReadOnlyArray (przekonwertowane na ReadonlyArray) pojawiają się w deklaracjach tak, jak zapisano.
Typy maybe stają się T | null | undefined, jak Label w przykładzie.
Kompilowany jest tylko jeden plik; importowane typy nie są rozwiązywane.
FAQ
Czy funkcje asynchroniczne i typy zwracane Promise są zachowywane?
Tak. export async function load(id: number): Promise<Tag> staje się export declare function load(id: number): Promise<Tag>.
Co się dzieje z domyślnymi wartościami parametrów?
Są one usuwane, a parametr staje się opcjonalny: b: Punkt = ORIGIN staje się b?: Punkt.
Czy aliasy typów są zachowywane?
Tak. Wyeksportowane aliasy typów pojawiają się w przekonwertowanej formie TypeScript. Strona formatuje wynik za pomocą narzędzia Prettier, więc używa wcięcia z dwoma spacjami i nie używa średników.