0Pricing
TypeScript Academy · درس

نمط Result: ‏Ok وErr

أعيدوا الأخطاء كقيم بدلًا من إطلاقها

نمط Result: ‏Ok وErr درس مجاني في TypeScript Academy على CoddyKit. هذا هو الدرس 2 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في TypeScript Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة TypeScript Academy 4 دروس في المجموع.

مرحبًا

يعيد نمط Result الأخطاء كقيم، مما يتيح معالجة أخطاء آمنة من ناحية الأنواع دون استخدام try/catch.

نوع Result

عرّف نوع Result عامًا مع البديلين Ok وErr.
type Ok<T> = { ok: true; value: T };
type Err<E = Error> = { ok: false; error: E };
type Result<T, E = Error> = Ok<T> | Err<E>;

دوال إنشاء مساعدة

أنشئ الدالتين المساعدتين ok() وerr() لجعل الشيفرة أكثر وضوحًا.
const ok = <T>(value: T): Ok<T> => ({ ok: true, value });
const err = <E>(error: E): Err<E> => ({ ok: false, error });

إرجاع قيم Result

أعد قيم Result من الدوال بدلًا من طرح الاستثناءات.
async function fetchUser(id: number): Promise<Result<User>> {
  try {
    const user = await db.findUser(id);
    if (!user) return err(new Error('Not found'));
    return ok(user);
  } catch (e) { return err(e as Error); }
}

استهلاك قيم Result

تحقق من العلامة ok قبل استخدام القيمة.
const result = await fetchUser(1);
if (result.ok) {
  console.log(result.value.name); // User
} else {
  console.error(result.error.message);
}

الدالة المساعدة mapResult

طبّق تحويلًا على Result ناجح لتغيير القيمة.
function mapResult<T, U, E>(r: Result<T, E>, fn: (v: T) => U): Result<U, E> {
  return r.ok ? ok(fn(r.value)) : r;
}

الدالة المساعدة flatMapResult

سلسِل الدوال التي تُرجع Result بأمان.
function flatMap<T, U, E>(r: Result<T, E>, fn: (v: T) => Result<U, E>): Result<U, E> {
  return r.ok ? fn(r.value) : r;
}

Result مقابل الاستثناءات

الاستثناءات ضمنية وغير محددة النوع، أما Result فقيم صريحة تظهر في توقيع النوع.

دعم المكتبات

توفر مكتبات مثل neverthrow وtrue-myth وfp-ts أنواع Result جاهزة للاستخدام في بيئات الإنتاج.

استخدام Result في معالجات API

استخدم Result في معالجات Express لنشر الأخطاء بطريقة واضحة.
app.get('/users/:id', async (req, res) => {
  const result = await fetchUser(parseInt(req.params.id));
  if (result.ok) res.json(result.value);
  else res.status(404).json({ error: result.error.message });
});

Result غير المتزامن

استخدم Promise> للجمع بين العمليات غير المتزامنة ونمط Result.
type AsyncResult<T, E = Error> = Promise<Result<T, E>>;

تحقق سريع

ما الميزة الأساسية لنمط Result مقارنة بطرح الاستثناءات؟

مراجعة

نمط Result: Ok وErr: تعلّمتم المفاهيم الأساسية لهذا الموضوع وكيفية تطبيقها في مشاريع TypeScript الحقيقية.

الأسئلة الشائعة

هل درس «نمط Result: ‏Ok وErr» مجاني؟

نعم — نص درس «نمط Result: ‏Ok وErr» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة TypeScript Academy، انتقل إلى CoddyKit PRO. تتضمن دورة TypeScript Academy 4 دروس في المجموع.

ماذا ستتعلم في «نمط Result: ‏Ok وErr»؟

أعيدوا الأخطاء كقيم بدلًا من إطلاقها تتمرن على TypeScript Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.

هل أحتاج إلى خبرة سابقة لأبدأ TypeScript Academy؟

لا تُشترط خبرة سابقة. TypeScript Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 2 من أصل 4.

كم من الوقت يستغرق درس «نمط Result: ‏Ok وErr»؟

معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.

هل يمكنني كتابة وتشغيل أكواد في درس TypeScript Academy هذا؟

نعم. كل درس في TypeScript Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.

جميع الدروس في هذه الدورة

  1. فئات الأخطاء وتسلسلاتها محددة الأنواع
  2. نمط Result: ‏Ok وErr
  3. تضييق الأخطاء الملتقطة: ‏unknown أم Error
  4. معالجة الأخطاء في شيفرة TypeScript غير المتزامنة
← العودة إلى TypeScript Academy