Przejdź do treści

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ć

  1. Wklej moduł Flow do panelu Flow.
  2. Lokalny konwerter z opcją declarationOnly przekształca kod na TypeScript i emituje deklaracje w przeglądarce.
  3. 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.

Specyfikacje i referencje