تايب سكريبت

التاريخ

تم إصدار  تايب اسكربت لأول مرة في أكتوبر 2012 (الإصدار 0.8) ، بعد عامين من التطوير الداخلي في مايكروسوفت. بعد فترة وجيزة من الإعلان ، أشاد ميجيل دي إيكازا باللغة نفسها ، لكنه انتقد عدم وجود دعم IDE الناضج بعيدًا عن  مايكروسوفت فيجوال ستوديو  ، والذي لم يكن متاحًا على Linux و OS X في ذلك الوقت. اعتبارا من 2013 هناك دعم في IDEs أخرى ، لا سيما في اكبلس ، من خلال المكونات الإضافية التي ساهمت بها Palantir Technologies . محررات النصوص المختلفة ، بما في ذلك ايماكس و فيم و سابليم تكست و Webstorm و أتوم و مايكروسوفتميجيل دي إيكازامايكروسوفت فيجوال ستوديو اعتبارا من 2013إكلبسإيماكسفيمسابليم تكستأتوم كما يدعم Visual Studio Code تايب اسكربت.
قام تايب اسكربت 0.9 ، الذي صدر في عام 2013 ، بإضافة دعم للأدوية. تم إصدار تايب اسكربت 1.0 في مؤتمر مايكروسوفت Build المطور في عام 2014. يوفر  مايكروسوفت فيجوال ستوديو 2013 Update 2 دعمًا مضمنًا لـ تايب اسكربت.
في يوليو 2014 ، أعلن فريق التطوير عن مترجم جديد لـ تايب اسكربت ، مدعياً مكاسب أداء 5 ×. في الوقت نفسه ، تم نقل شفرة المصدر ، التي استضافت في البداية على كود بلاكس ، إلى غيت هاب .
في 22 سبتمبر 2016 ، تم إصدار تايب اسكربت 2.0 ؛ قدم العديد من الميزات ، بما في ذلك قدرة المبرمجين على منع المتغيرات بشكل اختياري من تعيين nullقيم.

تصميم اللغة

نشأت تايب اسكربت من أوجه القصور المتصورة في جافا سكريبت لتطوير التطبيقات واسعة النطاق سواء في مايكروسوفت أو بين عملائها الخارجيين. أدت التحديات في التعامل مع شفرة جافا سكريبت المعقدة إلى الطلب على الأدوات المخصصة لتسهيل تطوير المكونات في اللغة.
سعى مطورو تايب اسكربت إلى حل لا يكسر التوافق مع المعيار ودعمه عبر الأنظمة الأساسية. مع العلم أن الاقتراح القياسي الحالي ECMAScript وعدت الدعم المستقبلي للبرمجة القائمة على الطبقة ، واستند تايب اسكربت على هذا الاقتراح. أدى ذلك إلى مترجم جافا سكريبت مع مجموعة من الامتدادات اللغوية النحوية ، وهي مجموعة كبيرة تعتمد على الاقتراح ، والتي تحول الإضافات إلى جافا سكريبت عادية. من هذا المنطلق ، كان تايب اسكربت بمثابة معاينة لما يمكن توقعه من ECMAScript 2015. والجانب الفريد ليس في الاقتراح ، ولكنه تمت إضافته إلى تايب اسكربت ، هو كتابة ثابتة اختيارية  تمكن تحليل اللغة الثابت ، مما يسهل الأدوات ودعم IDE.

دعم ECMAScript 2015

تضيف تايب اسكربت الدعم إلى ميزات مثل الفئات والوحدات النمطية وبناء جملة دالة السهم كما هو مقترح في معيار ECMAScript 2015

استخدام ملفات التصريحات في تايب سكريبت

أصبح استخدام ملفات التصريحات سهلًا جدًّا منذ النسخة 2.0 من تايب سكريبت، إذ أصبح الحصول عليها واستخدامها والعثور عليها أبسط من ذي قبل. ستساعدك هذه الصفحة على القيام بهذه العمليات الثلاث.
تنزيل ملفات التصريحات

على سبيل المثال، يمكن الحصول على التصريحات لمكتبةٍ مثل lodash ببساطة بالأمر التالي فقط:
npm install --save @types/lodash
من الجدير بالذكر أنّ تنزيل حزمةِ @types لمكتبةٍ غير ضروري إذا كانت حزمة npm تُحزِّم ملفّ تصريحاتها، كما وصفنا في صفحة نشر ملفات التصريحات.

الاعتماد على ملف التصريحات

بعد الخطوة السابقة، يمكنك استخدام lodash في شيفرة تايب سكريبت مباشرةً. ويمكنك الاعتماد عليها في الوحدات والشيفرة العامة (global code) كذلك.

مثلًا، بعد تثبيت تصريحاتك باستخدام npm install، يمكنك استعمال المكتبة كالتالي:
import * as _ from "lodash";
_.padStart("Hello TypeScript!", 20, " ");
وإن كنت لا تستخدم الوحدات، فيمكنك فقط استعمال المتغير العام الذي توفره المكتبة (_ في مكتبة lodash):
_.padStart("Hello TypeScript!", 20, " ");

البحث والعثور عن ملفات التصريحات

تحمل حزم تصريحات الأنواع في أغلب الأحوال نفسَ اسم الحزمة على npm، لكن مع السابقة @types/، لكن إن احتجت إلى البحث عنها، فاستعمل محرك البحث هذا للبحث عن الحزمة لمكتبتك.

التوافق مع جافا سكريبت

تايب اسكربت عبارة عن مجموعة شاملة جدًا من ECMAScript 2015 ، والتي تعد بحد ذاتها مجموعة شاملة من ECMAScript 5 ، والتي يشار إليها عادةً باسم جافا سكريبت. على هذا النحو ، يعد برنامج جافا سكريبت أيضًا برنامج تايب اسكربت صالحًا ، ويمكن لبرنامج تايب اسكربت أن يستهلك جافا سكريبت بسلاسة. بشكل افتراضي ، يستهدف المحول البرمجي ECMAScript 5 ، المعيار السائد الحالي ، ولكنه قادر أيضًا على إنشاء التركيبات المستخدمة في ECMAScript 3 أو 2015.
باستخدام تايب اسكربت ، من الممكن استخدام شفرة جافا سكريبت الموجودة ، وتضمين مكتبات جافا سكريبت الشائعة ، والاتصال بالكود المتولد من تايب اسكربت من جافا سكريبت أخرى. يتم توفير تعريفات النوع لهذه المكتبات مع شفرة المصدر.

اكتب التعليقات التوضيحية

يوفر تايب اسكربت الكتابة الثابتة عبر التعليقات التوضيحية للنوع لتمكين الكتابة من التحقق في وقت التحويل البرمجي . هذا أمر اختياري ويمكن تجاهله لاستخدام الكتابة الديناميكية الدورية لجافا سكريبت.
function add(left: number, right: number): number 
{
return left + right;}
شروح لأنواع بدائية هي number، booleanو string. البنى الضعيفة أو الديناميكية هي من النوع any.
يمكن تصدير التعليقات التوضيحية إلى ملف تعريفات منفصل لتوفير معلومات الكتابة للنصوص النصية لـ تايب اسكربت باستخدام الأنواع التي تم تجميعها بالفعل في جافا سكريبت. يمكن الإعلان عن التعليقات التوضيحية لمكتبة جافا سكريبت الحالية ، كما تم القيام به لـ نود.جي إس و جي كويري .
يستخدم برنامج التحويل البرمجي لـ تايب اسكربت من نوع الاستدلال لاكتشاف الأنواع عندما لا يتم إعطاء الأنواع. على سبيل المثال ، addيمكن الاستدلال على الطريقة الواردة في التعليمة البرمجية أعلاه كإعادة numberولو لم يتم تقديم تعليق توضيحي لنوع الإرجاع. ويستند هذا على أنواع ثابتة leftو rightيجري numbers، والمعرفة المترجم أن نتيجة إضافة اثنين numbersهي دائما number. ومع ذلك ، فإن التصريح بوضوح بنوع الإرجاع يسمح للمترجم بالتحقق من صحته.
إذا لم يكن بالإمكان الاستدلال على أي نوع بسبب نقص الإعلانات ، فإنه يتم تعيينه افتراضيًا إلى anyالنوع الديناميكي . تدعم قيمة anyالنوع العمليات نفسها كقيمة في جافا سكريبت ويتم تنفيذ فحص الحد الأدنى من النوع الثابت لعمليات على anyالقيم.

ملفات الإعلان

عند تجميع برنامج نصي لـ تايب اسكربت ، يوجد خيار لإنشاء ملف تعريف (مع الامتداد .d.ts) يعمل واجهة (حوسبة) إلى هندسة البرمجيات بالمكونات في جافا سكريبت المترجمة. في هذه العملية ، يقوم المترجم بإبعاد جميع هيئات الدالة والوظيفية ويحفظ فقط تواقيع الأنواع التي يتم تصديرها. يمكن بعد ذلك استخدام ملف التصريح الناتج لوصف أنواع تايب اسكربت الظاهرية المصدرة لمكتبة جافا سكريبت أو وحدة نمطية عندما يستهلكها مطور خارجي من تايب اسكربت.

يتشابه مفهوم ملفات التعريف مع مفهوم ملف الرأس الموجود في C / C ++ .
declare module arithmetics {
    add(left: number, right: number): number;
    subtract(left: number, right: number): number;
    multiply(left: number, right: number): number;
    divide(left: number, right: number): number;}
يمكن كتابة ملفات تعريف النوع يدويًا لمكتبات جافا سكريبت الحالية ، كما تم القيام به لـ jQuery و Node.js.
يتم استضافة مجموعات كبيرة من ملفات التصريح لمكتبات جافا سكريبت الشائعة على GitHub في DefinitelyTyped و Typings Registry . يتم توفير أداة مساعدة لسطر الأوامر تسمى typingsللمساعدة في البحث

الطبقات

يدعم تايب اسكربت فئات ECMAScript 2015 التي تدعم دعم التعليقات التوضيحية بالنوع الاختياري.
class Person {
    private name: string;
    private age: number;
    private salary: number;

    constructor(name: string, age: number, salary: number) {
        this.name = name;
        this.age = age;
        this.salary = salary;
    }

    toString(): string {
        return `${this.name} (${this.age}) (${this.salary})`; // As of version 1.4
    }}

الأدوية

يدعم تايب اسكربت البرمجة العامة .

الوحدات و مساحات الأسماء

يميز تايب اسكربت بين الوحدات ومساحات الأسماء. كلتا الميزتين في دعم تايب اسكربت يدعمان الطبقات والواجهات والوظائف والمتغيرات في الحاويات. تستخدم مساحات الأسماء (الوحدات الداخلية سابقًا) تعبير الدالة المستدعى على الفور من جافا سكريبت لتغليف التعليمات البرمجية ، بينما تستخدم الوحدات النمطية (وحدات خارجية سابقًا) أنماط مكتبة جافا سكريبت للقيام بذلك ( AMD أو CommonJS ).

مترجم

مترجم نسخة مطبوعة على الآلة الكاتبة، واسمه tscهو، وكتب في نسخة مطبوعة على الآلة الكاتبة . ونتيجة لذلك ، يمكن تجميعها في جافا سكريبت عادية ويمكن بعد ذلك تنفيذها في أي محرك جافا سكريبت (على سبيل المثال ، متصفح). تأتي حزمة برنامج التحويل البرمجي مجمعة مع مضيف برنامج نصي يمكنه تنفيذ المحول البرمجي. وهو متوفر أيضًا كحزمة نود.جي إس التي تستخدم Node.js كمضيف.
يوجد أيضًا إصدار ألفا من برنامج التحويل البرمجي من جانب العميل في جافا سكريبت ، والذي ينفذ شفرة تايب اسكربت على الفور ، عند تحميل الصفحة.
يدعم الإصدار الحالي من المحول البرمجي ECMAScript 5 بشكل افتراضي. يُسمح للخيار باستهداف ECMAScript 2015 للاستفادة من ميزات اللغة الخاصة بهذا الإصدار (مثل المولدات). تتوفر الفصول ، على الرغم من كونها جزءًا من معيار ECMAScript 2015 ، في كلا الوضعين.

التكامل مع أدوات أتمتة البناء

باستخدام المكونات الإضافية ، يمكن دمج تايب اسكربت مع أدوات التنفيذ التلقائي ، بما في ذلك Grunt (grunt-ts ) و  أباتشي ميفن (تايب اسكربت Maven Plugin ) و Gulp (gulp -تايب اسكربت ) و Gradle (تايب اسكربت Gradle Plugin ).