الكلمة الأساسية الممتدة في TypeScript هي سكين الجيش السويسري من نوع ما. يتم استخدامه في سياقات متعددة، بما في ذلك الميراث والأسماء العامة والأنواع الشرطية. إن فهم كيفية استخدام الامتدادات بشكل فعال يمكن أن يؤدي إلى تعليمات برمجية أكثر قوة وقابلة لإعادة الاستخدام وآمنة للكتابة.
أحد الاستخدامات الأساسية للامتدادات هو الوراثة، مما يسمح لك بإنشاء واجهات أو فئات جديدة تعتمد على واجهات أو فئات موجودة.
interface User { firstName: string; lastName: string; email: string; } interface StaffUser extends User { roles: string[]; department: string; } const regularUser: User = { firstName: "John", lastName: "Doe", email: "[email protected]" }; const staffMember: StaffUser = { firstName: "Jane", lastName: "Smith", email: "[email protected]", roles: ["Manager", "Developer"], department: "Engineering" };
في هذا المثال، يقوم StaffUser بتوسيع المستخدم، ويرث جميع خصائصه ويضيف خصائص جديدة. يتيح لنا ذلك إنشاء أنواع أكثر تحديدًا بناءً على أنواع أكثر عمومية.
يتم استخدام الكلمة الأساسية الممتدة أيضًا لوراثة الفصل:
class Animal { constructor(public name: string) {} makeSound(): void { console.log("Some generic animal sound"); } } class Dog extends Animal { constructor(name: string, public breed: string) { super(name); } makeSound(): void { console.log("Woof! Woof!"); } fetch(): void { console.log(`${this.name} is fetching the ball!`); } } const myDog = new Dog("Buddy", "Golden Retriever"); myDog.makeSound(); // Output: Woof! Woof! myDog.fetch(); // Output: Buddy is fetching the ball!
هنا، يقوم الكلب بتوسيع نطاق الحيوان، ويرث خصائصه وأساليبه، ويضيف خصائصه وأساليبه أيضًا.
تعد الكلمة الأساسية Extends أمرًا بالغ الأهمية عند العمل مع الأدوية العامة، مما يسمح لنا بتقييد الأنواع التي يمكن استخدامها مع وظيفة أو فئة عامة.
interface Printable { print(): void; } function printObject(obj: T) { obj.print(); } class Book implements Printable { print() { console.log("Printing a book."); } } class Magazine implements Printable { print() { console.log("Printing a magazine."); } } const myBook = new Book(); const myMagazine = new Magazine(); printObject(myBook); // Output: Printing a book. printObject(myMagazine); // Output: Printing a magazine. // printObject(42); // Error, number doesn't have a 'print' method
باختصار، يتم استخدام الكلمة الأساسية الممتدة في سياق الوظيفة printObject
T extends U ? X : Y
type ExtractNumber= T extends number ? T : never; type NumberOrNever = ExtractNumber ; // number type StringOrNever = ExtractNumber ; // never
هنا، يأخذ النوع ExtractNumber معلمة النوع T. يتحقق النوع الشرطي مما إذا كان T يوسع نوع الرقم. إذا كان الأمر كذلك، يتحول النوع إلى T (وهو نوع الرقم). إذا لم يحدث ذلك، فسيتحول النوع إلى "أبدًا".
الآن، لنفكر في التعبير A | ب | يمتد C إلى A. قد يبدو هذا غير بديهي في البداية، ولكن في TypeScript، هذا الشرط غير صحيح في الواقع. وإليكم السبب:
type Fruit = "apple" | "banana" | "cherry"; type CitrusFruit = "lemon" | "orange"; type IsCitrus= T extends CitrusFruit ? true : false; type Test1 = IsCitrus; // true type Test2 = IsCitrus; // false type Test3 = IsCitrus ; // false
في هذا المثال، IsCitrus
تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.
Copyright© 2022 湘ICP备2022001581号-3