إنشاء ملفات تصريحات TypeScript — Numio
يُخرج ملف تعريفات .d.ts من شيفرة TypeScript المصدرية، كما يفعل tsc --declaration --emitDeclarationOnly. تُزال أجسام الدوال والمُهيِّئات، ولا يبقى من أعضاء الأصناف الخاصة إلا أسماؤها.
تريد معاينة سطح الأنواع العام الذي سينشره ملف مكتبة قبل بناء الحزمة.
TypeScript
TypeScript
متى تستخدمها
- تريد معاينة سطح الأنواع العام الذي سينشره ملف مكتبة قبل بناء الحزمة.
- تحتاج إلى ملف .d.ts تصونه يدويًا لوحدة واحدة، أو إلى مدخلات تقتصر على التعريفات لأداة TypeScript to Flow.
طريقة الاستخدام
- الصق وحدة TypeScript في لوحة TypeScript.
- تُرسَل الشيفرة إلى /api/flow-to-typescript مع ضبط isTS وdeclarationOnly، ويُخرج مترجم TypeScript التعريفات على الخادم.
- انسخ التعريفات إلى ملف .d.ts. تنسّقها الصفحة باستخدام Prettier، لذا تستخدم إزاحة بمسافتين ولا تحتوي على فواصل منقوطة.
TypeScript
export interface CartItem { sku: string; price: number; qty: number }
export const TAX_RATE = 0.08;
export function subtotal(items: CartItem[]) {
return items.reduce((sum, i) => sum + i.price * i.qty, 0);
}
export class Cart {
private items: CartItem[] = [];
constructor(public readonly currency = "USD") {}
add(item: CartItem) {
this.items.push(item);
return this;
}
}تعريفات TypeScript (.d.ts)
export interface CartItem {
sku: string
price: number
qty: number
}
export declare const TAX_RATE = 0.08
export declare function subtotal(items: CartItem[]): number
export declare class Cart {
readonly currency: string
private items
constructor(currency?: string)
add(item: CartItem): this
}التفاصيل والقيود
ترسل الصفحة مدخلاتك إلى مسار على الخادم (/api/flow-to-typescript) لتحويلها؛ فهي لا تُعالَج في المتصفح فقط. تقبل مسارات API في Next.js افتراضيًا أجسام طلبات حتى 1 ميغابايت.
يحمّل المترجم ملفات مكتبة ES2020 وDOM من TypeScript، لذا تُكتب Promise وDate وMap وأنواع الإرجاع المستنتَجة من التوابع المدمجة (number لـ subtotal في المثال) بشكل صحيح.
توقف الأخطاء النحوية التحويل، وتُعرض رسالة المترجم بدلًا من الناتج، مثل TS1134 "Variable declaration expected".
تُترجَم كل مدخلات كملف واحد؛ ولا تُحَل الاستيرادات من وحدات أخرى.
FAQ
هل الدوال غير المتزامنة async مدعومة؟
نعم. يُغلَّف نوع الإرجاع المستنتَج في Promise، فتُعلَن دالة async تعيد Todo[] بالشكل export declare function loadTodos(url: string): Promise<Todo[]>.
ماذا يحدث للأعضاء الخاصة؟
تبقى بأسمائها فقط، مثل "private items;"، فيبقى شكل الصنف مطابقًا دون كشف النوع.
هل تبقى القيم الافتراضية للمعاملات؟
لا. يصبح المعامل ذو القيمة الافتراضية اختياريًا، فيصبح constructor(public readonly currency = "USD") إلى constructor(currency?: string).