انتقل إلى المحتوى

إنشاء ملفات تصريحات TypeScript — Numio

يُخرج ملف تعريفات .d.ts من شيفرة TypeScript المصدرية، كما يفعل tsc --declaration --emitDeclarationOnly. تُزال أجسام الدوال والمُهيِّئات، ولا يبقى من أعضاء الأصناف الخاصة إلا أسماؤها.

تريد معاينة سطح الأنواع العام الذي سينشره ملف مكتبة قبل بناء الحزمة.

TypeScript

TypeScript

متى تستخدمها

  • تريد معاينة سطح الأنواع العام الذي سينشره ملف مكتبة قبل بناء الحزمة.
  • تحتاج إلى ملف .d.ts تصونه يدويًا لوحدة واحدة، أو إلى مدخلات تقتصر على التعريفات لأداة TypeScript to Flow.

طريقة الاستخدام

  1. الصق وحدة TypeScript في لوحة TypeScript.
  2. تُرسَل الشيفرة إلى /api/flow-to-typescript مع ضبط isTS وdeclarationOnly، ويُخرج مترجم TypeScript التعريفات على الخادم.
  3. انسخ التعريفات إلى ملف .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).

المواصفات والمراجع