أنواع البيانات في TypeScript

أنواع البيانات في TypeScript

تشرح هذه المقالة أنواع البيانات في TypeScript۔

YouTube Video

أنواع البيانات في TypeScript

يوفر TypeScript مجموعة متنوعة من أنواع البيانات۔ يتيح لك ذلك تحديد أنواع صارمة للمتغيرات ومعاملات الدوال وقيم الإرجاع۔ فيما يلي أنواع البيانات الرئيسية واستخدامها۔

الأنواع الأولية

نوع number

1let age: number = 25;
2console.log(age);          // Outputs: 25
3console.log(typeof age);    // Outputs: number
  • النوع number يُستخدم للتعامل مع القيم العددية، بما في ذلك الأعداد الصحيحة والأعداد ذات الفاصلة العشرية (الكسور).۔ التعامل مع القيم التي تتجاوز حدودًا معينة يؤدي إلى Infinity أو NaN (ليس رقمًا).۔
1// Decimal calculations
2console.log(0.1 + 0.2 === 0.3); // false
3console.log(0.1 + 0.2); // 0.30000000000000004
4
5// Calculations with large numbers
6console.log(9007199254740991 + 1); // correct value
7console.log(9007199254740991 + 2); // incorrect value
  • في TypeScript، يتم تمثيل الأرقام كأرقام ذات فاصلة عائمة.۔ قد يؤدي هذا إلى حدوث بعض الأخطاء الطفيفة في نتائج العمليات الحسابية.۔

  • عند الحاجة إلى حسابات دقيقة، مثل المبالغ المالية، من الضروري تجنب أخطاء التقريب من هذا النوع.۔ على سبيل المثال، يمكنك استخدام BigInt أو toFixed()، أو تعديل الأماكن العشرية باستخدام مكتبات مثل decimal.js

نوع string

يتعامل نوع string مع البيانات النصية۔

1let greeting: string = "Hello, TypeScript!";
2console.log(greeting);     // Outputs: Hello, TypeScript!
3console.log(typeof greeting);  // Outputs: string

نوع boolean (منطقي)

يحتوي نوع boolean على قيمتين: true أو false۔

1let isOpen: boolean = true;
2console.log(isOpen);       // Outputs: true
3console.log(typeof isOpen);    // Outputs: boolean

null و undefined

null تمثل 'قيمة غير موجودة'، و undefined تمثل 'قيمة غير معرّفة'۔

1let emptyValue: null = null;
2let notDefined: undefined = undefined;
3
4console.log(emptyValue);       // Outputs: null
5console.log(typeof emptyValue);    // Outputs: object (JavaScript specification)
6
7console.log(notDefined);       // Outputs: undefined
8console.log(typeof notDefined);    // Outputs: undefined

Array

في TypeScript، يمكنك تحديد نوع عناصر المصفوفة۔ number[] هي مصفوفة من الأرقام، و string[] هي مصفوفة من النصوص۔

1let numbers: number[] = [1, 2, 3, 4];
2console.log(numbers);        // Outputs: [1, 2, 3, 4]
3console.log(typeof numbers); // Outputs: object
4
5let words: string[] = ["TypeScript", "JavaScript"];
6console.log(words);          // Outputs: ["TypeScript", "JavaScript"]
7console.log(typeof words);   // Outputs: object

Tuple

الـ tuple عبارة عن مصفوفة تحتوي على عناصر من أنواع مختلفة۔

1let person: [string, number] = ["Alice", 30];
2console.log(person);         // Outputs: ["Alice", 30]
3console.log(typeof person);  // Outputs: object

Enum

enum يعرّف مجموعة من الثوابت المسماة۔

1enum Color {
2    Red,
3    Green,
4    Blue
5}
6
7let favoriteColor: Color = Color.Green;
8console.log(favoriteColor);  // Outputs: 1 (Defaults start from 0)
9console.log(typeof favoriteColor); // Outputs: number

any

نوع any يمكنه احتواء أي نوع من القيم ويستخدم لتعطيل التحقق من الأنواع۔

1let anything: any = "Hello";
2console.log(anything);       // Outputs: Hello
3console.log(typeof anything);    // Outputs: string
4
5anything = 42;
6console.log(anything);       // Outputs: 42
7console.log(typeof anything);    // Outputs: number

نوع Union

باستخدام أنواع Union، يمكنك تعريف متغيرات يمكن أن تحتوي على نوع من عدة أنواع۔

1let identifier: number | string = "ID_12345";
2console.log(identifier);     // Outputs: ID_12345
3console.log(typeof identifier);  // Outputs: string
4
5identifier = 12345;
6console.log(identifier);     // Outputs: 12345
7console.log(typeof identifier);  // Outputs: number

الملخص

  • number، string، boolean: أنواع أولية۔
  • null، undefined: قيم خاصة۔
  • Array: مصفوفة تحتوي على أوصاف النوع۔
  • Tuple: مصفوفة تحتوي على عناصر من أنواع مختلفة۔
  • enum: نوع معدد۔
  • any: أي نوع۔
  • Union: متغير يمكن أن يأخذ أحد الأنواع المتعددة۔

من خلال استخدام هذه الأنواع من البيانات، يعزز TypeScript أمان الأنواع، مما يسهل تجنب الأخطاء أثناء التطوير۔

كائنات التغليف

الكائنات المغلفة في TypeScript هي كائنات تُنشأ تلقائيًا للتعامل مع أنواع البيانات الأولية ككائنات۔ تتيح الأنواع الأولية عمليات خفيفة وسريعة، بينما تحتوي الأنواع الكائنية على طرق وخصائص، مما يتيح عمليات أكثر ثراءً۔

في JavaScript (و TypeScript) توجد كائنات مغلفة تقابل أنواع البيانات الأولية مثل string، number، و boolean۔ يتم إنشاؤها باستخدام دوال منشئ تُسمى String، Number، و Boolean على التوالي۔

فيما يلي أمثلة للكائنات المغلفة۔

كائن السلسلة النصية (String Object)

يوفر كائن String خصائص وطرق لمعالجة النصوص۔

1let strPrimitive: string = "Hello, World!";
2let strObject: String = new String("Hello, World!");
3
4console.log(strPrimitive);         // Outputs: Hello, World!
5console.log(typeof strPrimitive);  // Outputs: string
6
7console.log(strObject);            // Outputs: [String: 'Hello, World!']
8console.log(typeof strObject);     // Outputs: object

الميزات:

  • على عكس النص الأولي string، يتم التعامل مع كائن String كـ object عند استخدام typeof۔
  • الكائنات المغلفة مفيدة عند التعامل مع النصوص أو استدعاء طرق عليها۔

كائن الرقم (Number Object)

يوفر كائن Number خصائص وطرق لمعالجة الأرقام۔

1let numPrimitive: number = 42;
2let numObject: Number = new Number(42);
3
4console.log(numPrimitive);         // Outputs: 42
5console.log(typeof numPrimitive);  // Outputs: number
6
7console.log(numObject);            // Outputs: [Number: 42]
8console.log(typeof numObject);     // Outputs: object

الميزات:

  • كائن Number، باعتباره غلافًا للأرقام، يتضمن طرقًا للعمليات الحسابية (مثل toFixed

كائن القيمة المنطقية (Boolean Object)

يوفر كائن Boolean خصائص وطرق لمعالجة القيم المنطقية۔

1let boolPrimitive: boolean = true;
2let boolObject: Boolean = new Boolean(true);
3
4console.log(boolPrimitive);        // Outputs: true
5console.log(typeof boolPrimitive); // Outputs: boolean
6
7console.log(boolObject);           // Outputs: [Boolean: true]
8console.log(typeof boolObject);    // Outputs: object

الميزات:

  • كائن Boolean هو غلاف للنوع الأولي boolean ويتم التعامل معه كـ object۔

الاختلافات بين الكائنات المغلفة وأنواع البيانات الأولية

نظرًا لأن الكائنات المغلفة تُعامل ككائنات، فإن هناك انخفاضًا طفيفًا في الأداء، لكن العمليات الوظيفية تصبح أكثر إمكانية بسبب الخصائص والطرق المضافة۔ علاوة على ذلك، هناك اختلافات في المقارنة عند استخدام == و ===۔

1let numPrimitive: number = 123;
2let numObject: Number = new Number(123);
3
4console.log('==  : ', numPrimitive == numObject);  // Outputs: true (Value comparison)
5console.log('=== : ', numPrimitive === numObject); // Outputs: false (Due to differing types)

الميزات:

  • == يقارن القيم فقط، بينما === يقارن بدقة شاملاً الأنواع۔ يُعيد التعبير === القيمة false عند مقارنة كائنات التغليف بأنواع البيانات الأولية۔

تحويل النوع

في TypeScript، من المهم إدارة تحويلات النوع الضمنية والصريحة بشكل مناسب.۔

تحويل النوع الضمني

  • في TypeScript، يجب تجنب تحويلات النوع الضمني قدر الإمكان لضمان سلامة النوع.۔
1const result: string = 5 + "5"; // "55" (the number is converted to a string)
2
3console.log(result);
  • في هذا المثال، يتم تحويل الرقم 5 ضمنيا إلى نص، مما يؤدي إلى الحصول على النص "55"

تحويل النوع الصريح

  • في TypeScript، استخدم تعليقات النوع أو دوال تحويل النوع لإجراء التحويلات بأمان.۔
1const num: string = "123";
2const convertedNum: number = Number(num); // Converts "123" to the number 123
3
4console.log(typeof num);
5console.log(typeof convertedNum);
  • في هذا المثال، يتم استخدام الدالة Number() لتحويل النص "123" بشكل صريح إلى الرقم 123

التحقق من النوع

في TypeScript، يمكنك استخدام العامل typeof للتحقق من نوع بيانات المتغير.۔

 1// Output: The type of 42 is: number
 2console.log('The type of 42             is:', typeof 42);
 3
 4// Output: The type of 42 is: bigint
 5console.log('The type of 42n            is:', typeof 42n);
 6
 7// Output: The type of "hello" is: string
 8console.log('The type of "hello"        is:', typeof "hello");
 9
10// Output: The type of true is: boolean
11console.log('The type of true           is:', typeof true);
12
13// Output: The type of undefined is: undefined
14console.log('The type of undefined      is:', typeof undefined);
15
16// Output: The type of null is: object
17console.log('The type of null           is:', typeof null);
18
19// Output: The type of Symbol() is: symbol
20console.log('The type of Symbol()       is:', typeof Symbol());
21
22// Output: The type of {} is: object
23console.log('The type of {}             is:', typeof {});
24
25// Output: The type of function () {} is: function
26console.log('The type of function () {} is:', typeof function () {});
  • في TypeScript، يمكنك استخدام typeof لفحص الأنواع، ولكن للحصول على تحقق أكثر دقة، يُوصى أيضًا باستخدام العاملين instanceof أو is

الملخص

  • يتم التعامل مع كائنات التغليف ككائنات لأنها توفر طرقًا وخصائص إضافية لأنواع البيانات الأولية۔
  • String، وNumber، وBoolean هي أمثلة تمثيلية على كائنات التغليف۔
  • على عكس أنواع البيانات الأولية، يتم التعرف على كائنات التغليف على أنها object عند استخدام typeof۔

يمكنك متابعة المقالة أعلاه باستخدام Visual Studio Code على قناتنا على YouTube.۔ يرجى التحقق من القناة على YouTube أيضًا.۔

YouTube Video