0Pricing
TypeScript Academy · Pelajaran

Saluran Error dan Dependensi

Lacak error bertipe dan dependensi yang disuntikkan dalam effect.

Saluran Error dan Dependensi adalah pelajaran TypeScript Academy gratis di CoddyKit. Ini adalah pelajaran 4 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar TypeScript Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus TypeScript Academy mencakup 4 pelajaran total.

Kanal Kesalahan dan Dependensi

Dua kanal membuat Effect menjadi kuat: kanal kesalahan bertipe (E) dan kanal persyaratan (R). Pelajaran ini menunjukkan cara gagal dengan kesalahan bertipe dan cara menyediakan dependensi melalui Context dan Layer.

Kegagalan Bertipe dengan Effect.fail

Effect.fail menempatkan sebuah nilai ke dalam kanal kesalahan. Kelas bertanda memudahkan pembedaan kesalahan.

import { Effect } from "effect";

class NotFound { readonly _tag = "NotFound"; }
class Forbidden { readonly _tag = "Forbidden"; }

const load = Effect.fail(new NotFound());
// Effect<never, NotFound, never>

Kesalahan Bergabung Saat Disusun

Mengurutkan efek dengan kesalahan yang berbeda akan menggabungkan kesalahan tersebut dalam kanal E, sehingga tipe mencantumkan setiap kemungkinan kegagalan.

// Effect<A, NotFound, never> then Effect<B, Forbidden, never>
// => Effect<B, NotFound | Forbidden, never>

Menangani Kesalahan

Effect.catchAll atau catchTag menangani kesalahan, menghapusnya dari kanal (atau menggantinya). Menangani NotFound mempersempit E.

import { Effect, pipe } from "effect";

const safe = pipe(
  Effect.fail(new NotFound()),
  Effect.catchTag("NotFound", () => Effect.succeed("default"))
);
// Effect<string, never, never> -- error handled

Memulihkan vs Meneruskan

Jika Anda tidak menangani suatu kesalahan, kesalahan tersebut tetap berada di E dan diteruskan kepada pemanggil, yang kemudian harus menanganinya atau meneruskannya lagi. Kompiler memastikan kesalahan tidak pernah hilang begitu saja.

Mendeklarasikan Dependensi

Sebuah layanan dideklarasikan sebagai Context.Tag. Efek yang menggunakannya akan memperoleh layanan tersebut dalam kanal R.

import { Context, Effect } from "effect";

class Random extends Context.Tag("Random")<
  Random,
  { readonly next: Effect.Effect<number> }
>() {}

const program = Effect.gen(function* () {
  const random = yield* Random;
  return yield* random.next;
});
// Effect<number, never, Random>

Persyaratan Tampak dalam Tipe

Perhatikan bahwa kanal R sekarang berisi Random. Efek tersebut tidak dapat dijalankan sampai persyaratan itu terpenuhi; kompiler menegakkannya.

Menyediakan dengan Lapisan

Sebuah Layer menjelaskan cara membangun layanan. Menyediakan sebuah lapisan memenuhi persyaratan dan menghapusnya dari R.

import { Effect, Layer } from "effect";

const RandomLive = Layer.succeed(Random, {
  next: Effect.sync(() => Math.random()),
});

const runnable = Effect.provide(program, RandomLive);
// Effect<number, never, never> -- R cleared

Menyusun Lapisan

Lapisan dapat bergantung pada lapisan lain dan digabungkan untuk membangun graf dependensi lengkap. Effect merangkainya dalam urutan yang benar berdasarkan tipenya.

import { Layer } from "effect";
// Layer.merge(DatabaseLive, LoggerLive)
// Layer that provides both services

Menguji dengan Menukar Lapisan

Karena dependensi dinyatakan secara eksplisit, pengujian dapat menyediakan lapisan yang berbeda (misalnya Random deterministik) tanpa menyentuh program yang sedang diuji, yang merupakan manfaat utama pelacakan persyaratan.

import { Layer, Effect } from "effect";

const RandomTest = Layer.succeed(Random, {
  next: Effect.succeed(0.5),
});
// Effect.provide(program, RandomTest) -> deterministic

Mengapa Ini Penting

Kanal kesalahan dan persyaratan mengubah asumsi yang tidak terlihat menjadi kontrak yang diperiksa kompiler: setiap kegagalan harus ditangani atau dideklarasikan, dan setiap dependensi harus disediakan. Inilah yang membuat program Effect yang besar menjadi tangguh dan mudah diuji.

Pemeriksaan Singkat

Pastikan pemahaman Anda tentang kanal kesalahan dan dependensi.

Ringkasan

Kanal kesalahan melacak kegagalan bertipe (Effect.fail, yang dipersempit oleh catchTag/catchAll) yang bergabung saat Anda menyusun efek, sedangkan kanal persyaratan melacak layanan yang dideklarasikan melalui Context.Tag dan dipenuhi oleh Layer melalui Effect.provide. Keduanya membuat kegagalan dan dependensi diperiksa oleh kompiler serta memudahkan pengujian melalui penukaran lapisan.

Pertanyaan yang Sering Diajukan

Apakah pelajaran “Saluran Error dan Dependensi” gratis?

Ya — teks lengkap “Saluran Error dan Dependensi” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus TypeScript Academy, upgrade ke CoddyKit PRO. Kursus TypeScript Academy mencakup 4 pelajaran total.

Apa yang akan aku pelajari di “Saluran Error dan Dependensi”?

Lacak error bertipe dan dependensi yang disuntikkan dalam effect. Kamu berlatih TypeScript Academy dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.

Apakah aku perlu pengalaman untuk memulai TypeScript Academy?

Tidak diperlukan pengalaman sebelumnya. TypeScript Academy di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 4 dari 4.

Berapa lama pelajaran “Saluran Error dan Dependensi” memakan waktu?

Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.

Bisakah aku menulis dan menjalankan kode dalam pelajaran TypeScript Academy ini?

Ya. Setiap pelajaran TypeScript Academy menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.

Semua pelajaran dalam kursus ini

  1. Mengapa Sistem Effect Penting
  2. Jenis Effect
  3. Menyusun Effect
  4. Saluran Error dan Dependensi
← Kembali ke TypeScript Academy