تحويل Flow إلى ملفات تصريحات TypeScript — Numio
يحوّل شيفرة Flow إلى TypeScript باستخدام flow-to-ts، ثم يُخرج ملف تعريفات .d.ts فقط باستخدام مترجم TypeScript. تُزال الأجسام، وتصبح المعاملات ذات القيم الافتراضية اختيارية.
حزمة مكتوبة بـ Flow وتريد توفير أنواع TypeScript لمستخدمي TypeScript دون نقل الشيفرة المصدرية.
Flow
TypeScript Declarations
متى تستخدمها
- حزمة مكتوبة بـ Flow وتريد توفير أنواع TypeScript لمستخدمي TypeScript دون نقل الشيفرة المصدرية.
- تريد مقارنة الواجهة البرمجية المُصدَّرة لوحدة Flow بما يقابلها في TypeScript.
طريقة الاستخدام
- الصق وحدة Flow في لوحة Flow.
- تُرسَل إلى /api/flow-to-typescript مع ضبط declarationOnly؛ فيحوّلها الخادم إلى TypeScript ويُخرج التعريفات.
- انسخ النتيجة من لوحة TypeScript Declarations إلى ملف index.d.ts بجوار نقطة دخول حزمتك.
Flow
// @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); }
}تعريفات 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
}التفاصيل والقيود
ترسل الصفحة مدخلاتك إلى مسار على الخادم (/api/flow-to-typescript) لتحويلها؛ فهي لا تُعالَج في المتصفح فقط. تقبل مسارات API في Next.js افتراضيًا أجسام طلبات حتى 1 ميغابايت.
تُحمَّل ملفات مكتبة ES2020 وDOM من TypeScript، لذا تظهر Array<T> وPromise وDate و$ReadOnlyArray (المحوَّل إلى ReadonlyArray) في التعريفات كما كُتبت.
تصبح أنواع maybe إلى T | null | undefined، كما في Label في المثال.
يُترجَم ملف واحد فقط؛ ولا تُحَل الأنواع المستوردة.
FAQ
هل تبقى الدوال async وأنواع إرجاع Promise؟
نعم. يصبح export async function load(id: number): Promise<Tag> إلى export declare function load(id: number): Promise<Tag>.
ماذا يحدث للقيم الافتراضية للمعاملات؟
تُزال ويصبح المعامل اختياريًا: يصبح b: Point = ORIGIN إلى b?: Point.
هل تبقى الأسماء المستعارة للأنواع؟
نعم. تظهر الأسماء المستعارة المُصدَّرة بصيغتها المحوَّلة إلى TypeScript. تنسّق الصفحة النتيجة باستخدام Prettier، لذا تستخدم إزاحة بمسافتين ولا تحتوي على فواصل منقوطة.