أنواع البيانات في 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 أيضًا.۔