Da Flow a dichiarazioni TypeScript — Numio
Converte il codice Flow in TypeScript con flow-to-ts, quindi emette solo un file di dichiarazione .d.ts con il compilatore TypeScript. I corpi vengono rimossi e i parametri con valori predefiniti diventano facoltativi.
Un pacchetto è scritto in Flow e desideri spedire tipi TypeScript per i consumatori TypeScript senza migrare l'origine.
Flow
TypeScript Declarations
Quando usarlo
- Un pacchetto è scritto in Flow e desideri spedire tipi TypeScript per i consumatori TypeScript senza migrare l'origine.
- Si desidera confrontare lo API esportato di un modulo di flusso con il suo equivalente TypeScript.
Come si usa
- Incolla un modulo Flow nel pannello Flow.
- Un Web Worker locale converte il codice in TypeScript con declarationOnly attivo e genera le dichiarazioni.
- Copia il risultato dal pannello Dichiarazioni TypeScript in un file index.d.ts accanto al punto di ingresso del pacchetto.
Flusso
// @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); }
}Dichiarazioni 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
}Dettagli e limiti
La conversione avviene localmente in un Web Worker del browser; l’input non viene caricato su un server. Al primo utilizzo il browser scarica il modulo di conversione necessario.
Vengono caricate le librerie ES2020 e DOM di TypeScript, quindi Array<T>, Promise, Date e $ReadOnlyArray (convertito in ReadonlyArray) compaiono nelle dichiarazioni così come sono scritti.
I tipi maybe diventano T | null | undefined, come Label nell’esempio.
Viene compilato un solo file; i tipi importati non vengono risolti.
FAQ
Le funzioni asincrone e i tipi di restituzione Promise vengono mantenuti?
Sì. export async function load(id: number): Promise<Tag> diventa export declare function load(id: number): Promise<Tag>.
Cosa succede ai valori dei parametri predefiniti?
I valori predefiniti vengono rimossi e il parametro diventa facoltativo: b: Point = ORIGIN diventa b?: Point.
Vengono mantenuti gli alias dei tipi?
Sì. Gli alias del tipo esportato vengono visualizzati nel formato TypeScript convertito. La pagina formatta il risultato con Prettier, quindi utilizza il rientro a due spazi e nessun punto e virgola.