TypeScript naar Flow-typen — Numio
Converteert TypeScript-typeverklaringen naar Flow-typen met flowgen. readonly wordt de + variantiemarkering, geëxporteerde functies en klassen worden "declare export", en enums worden exacte alleen-lezen objecten.
U publiceert een TypeScript-bibliotheek en wilt ook Flow-definities verzenden voor consumenten die Flow gebruiken.
TypeScript
Wanneer gebruik je dit?
- U publiceert een TypeScript-bibliotheek en wilt ook Flow-definities verzenden voor consumenten die Flow gebruiken.
- Een Flow-codebase is afhankelijk van een pakket dat alleen .d.ts-typen heeft en je hebt een libdef nodig om mee te beginnen.
Hoe werkt het
- Plak TypeScript-declaraties (interfaces, typen, declare-statements, enums) of een module met implementatiecode in het TypeScript-paneel.
- De code wordt lokaal in je browser verwerkt. De TypeScript-compiler zet code met functiebodies of initialisatiewaarden eerst om naar .d.ts-declaraties; flowgen converteert deze vervolgens naar Flow en maakt de uitvoer op.
- Kopieer de Flow-uitvoer, plaats deze in uw flow-getypeerde map of een .js.flow-bestand en voer flow uit om het te controleren.
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 }Flow
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
|};Details en beperkingen
De conversie vindt lokaal plaats in een Web Worker in je browser. Je invoer wordt niet naar een conversieserver verstuurd. De benodigde bibliotheken worden in de browser geladen.
Implementatiecode wordt eerst gecompileerd tot aangiften, zodat alleen het getypte API overblijft: de hoofdteksten verdwijnen, afgeleide retourtypen worden ingevuld en niet-geëxporteerde waarden die niet voor export worden gebruikt, worden verwijderd.
Aliassen van objecttypes worden onnauwkeurig. Flow-objecten die eindigen op "..."; interfaces blijven interfaces.
Numerieke opsommingen worden een gedeclareerd exact object van alleen-lezen letterlijke waarden, bijvoorbeeld +Small: 0.
FAQ
Hoe worden alleen-lezen eigenschappen geconverteerd?
alleen-lezen uitgeschakeld: boolean wordt +uitgeschakeld: boolean, Flow's covariante (alleen-lezen) eigenschapsmarkering.
Kan ik een volledig .ts-bestand met implementaties plakken?
Ja. Eerst worden lokaal declaraties gegenereerd, zodat een pijlfunctie zonder typeannotatie haar afgeleide type krijgt, bijvoorbeeld declare export var greet: (u: User) => string. Syntaxisfouten worden gemeld in plaats van geconverteerd.
Worden TypeScript-opsommingen ondersteund?
Ja, als declare export var Name: {| +Member: value |}. Flow-enums worden niet gegenereerd.