البرمجة

تحويل كائنات TypeScript إلى JSON بأساليب الـ Getter والـ Setter

عند استخدام أساليب getter و setter في TypeScript، يصبح من المعتاد تعريف متغير خاص واستخدام البريفكس “” قبل اسمه، كما هو مبين في الشيفرة المعروضة. ومن ثم عند استخدام JSON.stringify() لتحويل الكائن إلى سلسلة JSON، يتم استخدام اسم المتغير مع البريفكس “” كمفتاح في السلسلة.

لكن هل هناك طريقة لجعل TypeScript يستخدم اسم أسلوب الـ getter كمفتاح؟ هذا ما يطرحه السائل، ويسأل عن طرق أخرى لاستخدام أساليب الـ getter والـ setter وفي الوقت نفسه الحصول على سلسلة JSON نظيفة دون الحاجة للتدخل اليدوي.

في الحقيقة، لا يدعم JSON.stringify() الوظائف المخصصة مثل getter و setter. بمعنى آخر، يتم تحويل الكائن إلى سلسلة JSON باستخدام الخصائص المباشرة، وليس باستخدام الوظائف المخصصة.

لحل هذه المشكلة، يمكننا استخدام مكتبة خارجية مثل class-transformer أو json-typescript-mapper التي تدعم التحويل التلقائي للكائنات TypeScript إلى ومن JSON، وتأخذ بعين الاعتبار الوظائف المخصصة.

إذا كنت تفضل عدم استخدام مكتبة خارجية، فيمكنك كتابة دالة تقوم بتحويل الكائن إلى سلسلة JSON بناءً على الأساليب المخصصة يدويًا. يمكن أن تبدو الدالة مثل هذا:

typescript
function toJSON(obj: any): string { const jsonObj: any = {}; Object.keys(obj).forEach(key => { const value = obj[key]; if (typeof value !== 'function') { const propertyName = key.replace(/^_/, ''); // Remove leading underscore jsonObj[propertyName] = value; } }); return JSON.stringify(jsonObj); }

تأخذ هذه الدالة كائنًا وتقوم بتحويله إلى كائن JSON، باستثناء الأساليب (الوظائف)، وتزيل البريفكس “_” من الخصائص.

بهذه الطريقة، يمكنك الحصول على سلسلة JSON نظيفة دون الحاجة لإعادة تسمية الخصائص يدويًا، وبدون الحاجة لاستخدام مكتبات خارجية إذا لم يكن لديك الرغبة في ذلك.

المزيد من المعلومات

بدلًا من استخدام الـ JSON.stringify() مباشرة، يمكنك الاستفادة من دالة التحويل المخصصة التي قمت بكتابتها. لنقم بتحويل كائن إلى سلسلة JSON باستخدام هذه الدالة المخصصة:

typescript
class MyClass { private _major: number; constructor(major: number) { this._major = major; } get major(): number { return this._major; } set major(major: number) { this._major = major; } toJSON(): string { const jsonObj: any = {}; Object.keys(this).forEach(key => { const value = this[key]; if (typeof value !== 'function') { const propertyName = key.replace(/^_/, ''); // Remove leading underscore jsonObj[propertyName] = value; } }); return JSON.stringify(jsonObj); } } const myObj = new MyClass(5); console.log(myObj.toJSON()); // Output: {"major":5}

هذا النهج يسمح بالحصول على سلسلة JSON نظيفة بسهولة، حيث يتم تحويل الكائن باستخدام الأساليب المخصصة بدون الحاجة إلى إعادة تسمية الخصائص يدويًا أو استخدام مكتبات خارجية.

وباستخدام هذه الطريقة، يمكنك الاستمتاع بالفوائد الكاملة للأساليب المخصصة في TypeScript دون التأثير على تنسيق البيانات المخرجة.

مقالات ذات صلة

زر الذهاب إلى الأعلى
إغلاق

أنت تستخدم إضافة Adblock

يرجى تعطيل مانع الإعلانات حيث أن موقعنا غير مزعج ولا بأس من عرض الأعلانات لك فهي تعتبر كمصدر دخل لنا و دعم مقدم منك لنا لنستمر في تقديم المحتوى المناسب و المفيد لك فلا تبخل بدعمنا عزيزي الزائر