الفرق بين المراجعتين ل"TypeScript/declaration files/by example"

من موسوعة حسوب
اذهب إلى التنقل اذهب إلى البحث
(إضافة الصّفحة)
 
سطر 17: سطر 17:
 
==الأمثلة==
 
==الأمثلة==
 
===المتغيرات العامة===
 
===المتغيرات العامة===
التوثيق:
+
'''التوثيق:'''
  
 
يحتوي المتغير العام ‎<code>foo</code>‎ على عدد الإضافات الموجودة.
 
يحتوي المتغير العام ‎<code>foo</code>‎ على عدد الإضافات الموجودة.
  
الشيفرة:
+
'''الشيفرة:'''
 
<syntaxhighlight lang="typescript">
 
<syntaxhighlight lang="typescript">
 
console.log("Half the number of widgets is " + (foo / 2));
 
console.log("Half the number of widgets is " + (foo / 2));
 
</syntaxhighlight>
 
</syntaxhighlight>
  
التصريح:
+
'''التصريح:'''
  
 
استعمل ‎<code>declare var</code>‎ للتصريح عن المتغيرات. إذا كان المتغير قابلًا للقراءة فقط (read-only) فيُمكنك استعمال ‎<code>declare const</code>‎. يمكنك كذلك استعمال ‎<code>declare let</code>‎ إذا كان المتغير محصورًا داخل كتلة (block-scoped).
 
استعمل ‎<code>declare var</code>‎ للتصريح عن المتغيرات. إذا كان المتغير قابلًا للقراءة فقط (read-only) فيُمكنك استعمال ‎<code>declare const</code>‎. يمكنك كذلك استعمال ‎<code>declare let</code>‎ إذا كان المتغير محصورًا داخل كتلة (block-scoped).
سطر 34: سطر 34:
 
</syntaxhighlight>
 
</syntaxhighlight>
 
===الدوال العامة===
 
===الدوال العامة===
التوثيق:
+
'''التوثيق:'''
  
 
يمكنك استدعاء الدالة ‎<code>greet</code>‎ مع تمرير سلسلة نصية لإظهار ترحيب للمستخدم.
 
يمكنك استدعاء الدالة ‎<code>greet</code>‎ مع تمرير سلسلة نصية لإظهار ترحيب للمستخدم.
  
الشيفرة:
+
'''الشيفرة:'''
 
<syntaxhighlight lang="typescript">
 
<syntaxhighlight lang="typescript">
 
greet("hello, world");
 
greet("hello, world");
 
</syntaxhighlight>
 
</syntaxhighlight>
  
التصريح:
+
'''التصريح:'''
 +
 
 
استعمل ‎<code>declare function</code>‎ للتصريح عن الدوال:
 
استعمل ‎<code>declare function</code>‎ للتصريح عن الدوال:
 
<syntaxhighlight lang="typescript">
 
<syntaxhighlight lang="typescript">
سطر 49: سطر 50:
 
</syntaxhighlight>
 
</syntaxhighlight>
 
===الكائنات ذات الخاصيات===
 
===الكائنات ذات الخاصيات===
التوثيق:
+
'''التوثيق:'''
  
 
لدى المتغير العام ‎<code>myLib</code>‎ دالةٌ باسم ‎<code>makeGreeting</code>‎ لإنشاء الترحيبات، وخاصيّة باسم ‎<code>numberOfGreetings</code>‎ تشير إلى عدد الترحيبات التي تمّت إلى الآن.
 
لدى المتغير العام ‎<code>myLib</code>‎ دالةٌ باسم ‎<code>makeGreeting</code>‎ لإنشاء الترحيبات، وخاصيّة باسم ‎<code>numberOfGreetings</code>‎ تشير إلى عدد الترحيبات التي تمّت إلى الآن.
  
الشيفرة:
+
'''الشيفرة:'''
 
<syntaxhighlight lang="typescript">
 
<syntaxhighlight lang="typescript">
 
let result = myLib.makeGreeting("hello, world");
 
let result = myLib.makeGreeting("hello, world");
سطر 61: سطر 62:
 
</syntaxhighlight>
 
</syntaxhighlight>
  
التصريح:
+
'''التصريح:'''
 +
 
 
استعمل ‎<code>declare namespace</code>‎ لوصف الأنواع أو القيم التي يمكن الوصول إليها عبر النقطة (‎<code>.</code>‎).
 
استعمل ‎<code>declare namespace</code>‎ لوصف الأنواع أو القيم التي يمكن الوصول إليها عبر النقطة (‎<code>.</code>‎).
 
<syntaxhighlight lang="typescript">
 
<syntaxhighlight lang="typescript">
سطر 70: سطر 72:
 
</syntaxhighlight>
 
</syntaxhighlight>
 
===الدوال ذات الأحمال الزائدة===
 
===الدوال ذات الأحمال الزائدة===
التوثيق:
+
'''التوثيق:'''
  
 
تستقبل الدالة ‎<code>getWidget</code>‎ عددًا وتُعيد كائنًا من النوع ‎<code>Widget</code>‎، أو تستقبل سلسلة نصية وتعيد مصفوفة تحتوي على عدّة كائنات من النوع ‎<code>Widget</code>‎.
 
تستقبل الدالة ‎<code>getWidget</code>‎ عددًا وتُعيد كائنًا من النوع ‎<code>Widget</code>‎، أو تستقبل سلسلة نصية وتعيد مصفوفة تحتوي على عدّة كائنات من النوع ‎<code>Widget</code>‎.
  
الشيفرة:
+
'''الشيفرة:'''
 
<syntaxhighlight lang="typescript">
 
<syntaxhighlight lang="typescript">
 
let x: Widget = getWidget(43);
 
let x: Widget = getWidget(43);
سطر 80: سطر 82:
 
let arr: Widget[] = getWidget("all of them");
 
let arr: Widget[] = getWidget("all of them");
 
</syntaxhighlight>
 
</syntaxhighlight>
التصريح:
+
'''التصريح:'''
 
<syntaxhighlight lang="typescript">
 
<syntaxhighlight lang="typescript">
 
declare function getWidget(n: number): Widget;
 
declare function getWidget(n: number): Widget;
سطر 86: سطر 88:
 
</syntaxhighlight>
 
</syntaxhighlight>
 
===الأنواع القابلة لإعادة الاستخدام (الواجهات)===
 
===الأنواع القابلة لإعادة الاستخدام (الواجهات)===
التوثيق:
+
'''التوثيق:'''
  
 
عند تحديد ترحيب معيّن، يجب عليك تمرير كائن من النوع ‎<code>GreetingSettings</code>‎، يمتلك هذا الكائن الخاصيات التاليّة:
 
عند تحديد ترحيب معيّن، يجب عليك تمرير كائن من النوع ‎<code>GreetingSettings</code>‎، يمتلك هذا الكائن الخاصيات التاليّة:
سطر 93: سطر 95:
 
# ‎<code>color</code>‎: سلسلة نصية اختيارية تمثل اللون ( مثل ‎<code>#ff00ff</code>‎).
 
# ‎<code>color</code>‎: سلسلة نصية اختيارية تمثل اللون ( مثل ‎<code>#ff00ff</code>‎).
  
الشيفرة:
+
'''الشيفرة:'''
 
<syntaxhighlight lang="typescript">
 
<syntaxhighlight lang="typescript">
 
greet({
 
greet({
سطر 100: سطر 102:
 
});
 
});
 
</syntaxhighlight>
 
</syntaxhighlight>
التصريح:
+
'''التصريح:'''
  
 
استعمل واجهةً ‎<code>interface</code>‎ لتعريف نوعٍ وخاصياته:
 
استعمل واجهةً ‎<code>interface</code>‎ لتعريف نوعٍ وخاصياته:
سطر 113: سطر 115:
 
</syntaxhighlight>
 
</syntaxhighlight>
 
===الأنواع القابلة لإعادة الاستخدام (أسماء الأنواع البديلة)===
 
===الأنواع القابلة لإعادة الاستخدام (أسماء الأنواع البديلة)===
التوثيق:
+
'''التوثيق:'''
  
 
يمكنك تمرير سلسلةٍ نصيّة، أو دالةٍ تعيد سلسلة نصية، أو تمريرُ نسخةٍ من ‎<code>Greeter</code>‎ في أي مكان يقبل ترحيبًا.
 
يمكنك تمرير سلسلةٍ نصيّة، أو دالةٍ تعيد سلسلة نصية، أو تمريرُ نسخةٍ من ‎<code>Greeter</code>‎ في أي مكان يقبل ترحيبًا.
  
الشيفرة:
+
'''الشيفرة:'''
 
<syntaxhighlight lang="typescript">
 
<syntaxhighlight lang="typescript">
 
function getGreeting() {
 
function getGreeting() {
سطر 128: سطر 130:
 
greet(new MyGreeter());
 
greet(new MyGreeter());
 
</syntaxhighlight>
 
</syntaxhighlight>
التصريح:
+
'''التصريح:'''
  
 
يمكنك استخدام تسميات الأنواع البديلة لإنشاء اختصارٍ لنوعٍ ما:
 
يمكنك استخدام تسميات الأنواع البديلة لإنشاء اختصارٍ لنوعٍ ما:
سطر 137: سطر 139:
 
</syntaxhighlight>
 
</syntaxhighlight>
 
===تنظيم الأنواع===
 
===تنظيم الأنواع===
التوثيق:
+
'''التوثيق:'''
  
 
يمكن أن يُسجّل (log) الكائن ‎<code>greeter</code>‎ إلى ملفّ أو يعرضَ تنبيهًا (alert). يمكنك توفير إعدادات التسجيل إلى ‎<code>.log(...)‎</code>‎ وإعدادات التنبيه إلى ‎<code>.alert(...)‎</code>‎.
 
يمكن أن يُسجّل (log) الكائن ‎<code>greeter</code>‎ إلى ملفّ أو يعرضَ تنبيهًا (alert). يمكنك توفير إعدادات التسجيل إلى ‎<code>.log(...)‎</code>‎ وإعدادات التنبيه إلى ‎<code>.alert(...)‎</code>‎.
  
الشيفرة:
+
'''الشيفرة:'''
 
<syntaxhighlight lang="typescript">
 
<syntaxhighlight lang="typescript">
 
const g = new Greeter("Hello");
 
const g = new Greeter("Hello");
سطر 147: سطر 149:
 
g.alert({ modal: false, title: "Current Greeting" });
 
g.alert({ modal: false, title: "Current Greeting" });
 
</syntaxhighlight>
 
</syntaxhighlight>
التصريح:
+
'''التصريح:'''
  
 
استعمل مجالات الأسماء لتنظيم الأنواع:
 
استعمل مجالات الأسماء لتنظيم الأنواع:
سطر 179: سطر 181:
  
 
===الأصناف===
 
===الأصناف===
التوثيق:
+
'''التوثيق:'''
  
 
يمكنك إنشاء مُرحِّبٍ عبر إنشاء نسخة من الكائن ‎<code>Greeter</code>‎، أو يمكنك إنشاء مرحّبٍ مخصّص عبر توسيعه.
 
يمكنك إنشاء مُرحِّبٍ عبر إنشاء نسخة من الكائن ‎<code>Greeter</code>‎، أو يمكنك إنشاء مرحّبٍ مخصّص عبر توسيعه.
  
الشيفرة:
+
'''الشيفرة:'''
 
<syntaxhighlight lang="typescript">
 
<syntaxhighlight lang="typescript">
 
const myGreeter = new Greeter("hello, world");
 
const myGreeter = new Greeter("hello, world");
سطر 195: سطر 197:
 
}
 
}
 
</syntaxhighlight>
 
</syntaxhighlight>
التصريح:
+
'''التصريح:'''
 +
 
 
استعمل ‎<code>declare class</code>‎ لوصف صنفٍ أو كائن شبيه بالأصناف (class-like object). يمكن للأصناف أن تحتوي على خاصيات وتوابع، إضافةً إلى الدوال البانية:
 
استعمل ‎<code>declare class</code>‎ لوصف صنفٍ أو كائن شبيه بالأصناف (class-like object). يمكن للأصناف أن تحتوي على خاصيات وتوابع، إضافةً إلى الدوال البانية:
 
<syntaxhighlight lang="typescript">
 
<syntaxhighlight lang="typescript">

مراجعة 11:39، 19 أكتوبر 2018


مقدمة

الهدف من هذا الدليل هو تعليمك كيفيّة كتابة ملف تعريف عالي الجودة. هذا الدليل يريك أولًا توثيق واجهة برمجية (API) معيّنة مع طريقة استعمالها، ثم يشرح كيفية كتابة التصريح الملائم.

هذه الأمثلة مرتبة تصاعديا حسب التعقيد، من الأبسط إلى الأعقد:

  • المتغيرات العامة (Global Variables).
  • الدوال العامة (Global Functions).
  • الكائنات ذات الخاصيات.
  • الدوال ذات الأحمال الزائدة (Overloaded Functions).
  • الأنواع القابلة لإعادة الاستخدام (الواجهات).
  • الأنواع القابلة لإعادة الاستخدام (أسماء الأنواع البديلة [Type Aliases]).
  • تنظيم الأنواع.
  • الأصناف.

الأمثلة

المتغيرات العامة

التوثيق:

يحتوي المتغير العام ‎foo‎ على عدد الإضافات الموجودة.

الشيفرة:

console.log("Half the number of widgets is " + (foo / 2));

التصريح:

استعمل ‎declare var‎ للتصريح عن المتغيرات. إذا كان المتغير قابلًا للقراءة فقط (read-only) فيُمكنك استعمال ‎declare const‎. يمكنك كذلك استعمال ‎declare let‎ إذا كان المتغير محصورًا داخل كتلة (block-scoped).

/** عدد الإضافات الموجودة */
declare var foo: number;

الدوال العامة

التوثيق:

يمكنك استدعاء الدالة ‎greet‎ مع تمرير سلسلة نصية لإظهار ترحيب للمستخدم.

الشيفرة:

greet("hello, world");

التصريح:

استعمل ‎declare function‎ للتصريح عن الدوال:

declare function greet(greeting: string): void;

الكائنات ذات الخاصيات

التوثيق:

لدى المتغير العام ‎myLib‎ دالةٌ باسم ‎makeGreeting‎ لإنشاء الترحيبات، وخاصيّة باسم ‎numberOfGreetings‎ تشير إلى عدد الترحيبات التي تمّت إلى الآن.

الشيفرة:

let result = myLib.makeGreeting("hello, world");
console.log("The computed greeting is:" + result);

let count = myLib.numberOfGreetings;

التصريح:

استعمل ‎declare namespace‎ لوصف الأنواع أو القيم التي يمكن الوصول إليها عبر النقطة (‎.‎).

declare namespace myLib {
    function makeGreeting(s: string): string;
    let numberOfGreetings: number;
}

الدوال ذات الأحمال الزائدة

التوثيق:

تستقبل الدالة ‎getWidget‎ عددًا وتُعيد كائنًا من النوع ‎Widget‎، أو تستقبل سلسلة نصية وتعيد مصفوفة تحتوي على عدّة كائنات من النوع ‎Widget‎.

الشيفرة:

let x: Widget = getWidget(43);

let arr: Widget[] = getWidget("all of them");

التصريح:

declare function getWidget(n: number): Widget;
declare function getWidget(s: string): Widget[];

الأنواع القابلة لإعادة الاستخدام (الواجهات)

التوثيق:

عند تحديد ترحيب معيّن، يجب عليك تمرير كائن من النوع ‎GreetingSettings‎، يمتلك هذا الكائن الخاصيات التاليّة:

  1. greeting‎: سلسلة نصية مطلوبة تمثل الترحيب.
  2. duration‎: عدد اختياري يمثل الزمن (بالمللي ثانية).
  3. color‎: سلسلة نصية اختيارية تمثل اللون ( مثل ‎#ff00ff‎).

الشيفرة:

greet({
  greeting: "hello world",
  duration: 4000
});

التصريح:

استعمل واجهةً ‎interface‎ لتعريف نوعٍ وخاصياته:

interface GreetingSettings {
  greeting: string;
  duration?: number;
  color?: string;
}

declare function greet(setting: GreetingSettings): void;

الأنواع القابلة لإعادة الاستخدام (أسماء الأنواع البديلة)

التوثيق:

يمكنك تمرير سلسلةٍ نصيّة، أو دالةٍ تعيد سلسلة نصية، أو تمريرُ نسخةٍ من ‎Greeter‎ في أي مكان يقبل ترحيبًا.

الشيفرة:

function getGreeting() {
    return "howdy";
}
class MyGreeter extends Greeter { }

greet("hello");
greet(getGreeting);
greet(new MyGreeter());

التصريح:

يمكنك استخدام تسميات الأنواع البديلة لإنشاء اختصارٍ لنوعٍ ما:

type GreetingLike = string | (() => string) | MyGreeter;

declare function greet(g: GreetingLike): void;

تنظيم الأنواع

التوثيق:

يمكن أن يُسجّل (log) الكائن ‎greeter‎ إلى ملفّ أو يعرضَ تنبيهًا (alert). يمكنك توفير إعدادات التسجيل إلى ‎.log(...)‎‎ وإعدادات التنبيه إلى ‎.alert(...)‎‎.

الشيفرة:

const g = new Greeter("Hello");
g.log({ verbose: true });
g.alert({ modal: false, title: "Current Greeting" });

التصريح:

استعمل مجالات الأسماء لتنظيم الأنواع:

declare namespace GreetingLib {
    interface LogOptions {
        verbose?: boolean;
    }
    interface AlertOptions {
        modal: boolean;
        title?: string;
        color?: string;
    }
}

يمكنك كذلك إنشاء مجالات أسماء متداخلة في تصريح واحد:

declare namespace GreetingLib.Options {
    // يُشار إلى الواجهة بالنقاط كما يلي
    // GreetingLib.Options.Log
    interface Log {
        verbose?: boolean;
    }
    interface Alert {
        modal: boolean;
        title?: string;
        color?: string;
    }
}

الأصناف

التوثيق:

يمكنك إنشاء مُرحِّبٍ عبر إنشاء نسخة من الكائن ‎Greeter‎، أو يمكنك إنشاء مرحّبٍ مخصّص عبر توسيعه.

الشيفرة:

const myGreeter = new Greeter("hello, world");
myGreeter.greeting = "howdy";
myGreeter.showGreeting();

class SpecialGreeter extends Greeter {
    constructor() {
        super("Very special greetings");
    }
}

التصريح:

استعمل ‎declare class‎ لوصف صنفٍ أو كائن شبيه بالأصناف (class-like object). يمكن للأصناف أن تحتوي على خاصيات وتوابع، إضافةً إلى الدوال البانية:

declare class Greeter {
    constructor(greeting: string);

    greeting: string;
    showGreeting(): void;
}

مصادر