تحويل أنواع Flow إلى TypeScript — Numio
يحوّل الشيفرة المحددة الأنواع بـ Flow إلى TypeScript باستخدام flow-to-ts من Khan Academy. تصبح أنواع maybe (?T) إلى T | null | undefined، وتصبح الكائنات الدقيقة أنواع كائنات عادية، ويصبح $ReadOnlyArray إلى ReadonlyArray.
تنقل قاعدة شيفرة Flow إلى TypeScript ملفًا تلو الآخر وتريد مسودة أولى لكل وحدة.
Flow
TypeScript
متى تستخدمها
- تنقل قاعدة شيفرة Flow إلى TypeScript ملفًا تلو الآخر وتريد مسودة أولى لكل وحدة.
- تحتاج إلى لصق مقتطف محدد الأنواع بـ Flow من مشروع React قديم في قاعدة شيفرة TypeScript.
طريقة الاستخدام
- الصق شيفرة Flow في لوحة Flow.
- تُرسَل إلى /api/flow-to-typescript وتُحوَّل على الخادم باستخدام flow-to-ts؛ ولا توجد إعدادات.
- انسخ TypeScript، واحفظه بصيغة .ts أو .tsx، وشغّل tsc لإصلاح ما لم يستطع التحويل ترجمته.
Flow
// @flow
import type { Node } from 'react';
export type User = {|
+id: number,
name: ?string,
roles: $ReadOnlyArray<string>,
|};
export function greet(user: User): string {
return `Hi ${user.name ?? 'guest'}`;
}
export const render = (title: string): Node => null;TypeScript
import type { Node } from "react"
export type User = {
readonly id: number
name: string | null | undefined
roles: ReadonlyArray<string>
}
export function greet(user: User): string {
return `Hi ${user.name ?? "guest"}`
}
export const render = (title: string): Node => nullالتفاصيل والقيود
ترسل الصفحة مدخلاتك إلى مسار على الخادم (/api/flow-to-typescript) لتحويلها؛ فهي لا تُعالَج في المتصفح فقط. تقبل مسارات API في Next.js افتراضيًا أجسام طلبات حتى 1 ميغابايت.
تفقد أنواع الكائنات الدقيقة {| |} دقتها لأن TypeScript لا يملك كائنات دقيقة، ويصبح +prop إلى readonly.
تبقى أنواع Flow المساعدة مثل $ReadOnly و$Keys بأسمائها وتُستورد من حزمة npm utility-types، التي ستحتاج إلى تثبيتها.
يُزال الموجِّه // @flow وتُعاد طباعة الشيفرة. تبقى استيرادات أنواع React مثل Node كما كُتبت، لذا أعد تسميتها بنفسك (مثل ReactNode).
FAQ
كيف تُحوَّل أنواع maybe؟
يصبح name: ?string إلى name: string | null | undefined. وتبقى الخاصية الاختيارية (name?: T) اختيارية.
هل يحوّل ملفات JSX؟
نعم. يبقى JSX، لذا احفظ النتيجة بصيغة .tsx.
هل أحصل على .d.ts بدلًا من الشيفرة الكاملة؟
ليس في هذه الصفحة. تستخدم أداة Flow to TypeScript Declaration مسار الخادم نفسه مع declarationOnly لإخراج التعريفات فقط.