TypeScript Academy · Pelajaran

Pemisahan Rentetan pada Aras Jenis

Pisahkan rentetan menjadi tuple dalam sistem jenis.

Pelajaran 2 daripada 413 langkah

Pemisahan Rentetan pada Aras Jenis ialah pelajaran TypeScript Academy percuma di CoddyKit. Ini ialah pelajaran 2 daripada 4. Anda boleh membaca keseluruhan pelajaran di bawah secara percuma — kemudian berlatih secara praktikal dalam pelayar menggunakan penyunting kod terbina dalam dan tutor kecerdasan buatan 24/7. Pelajaran ini merupakan sebahagian daripada laluan pembelajaran TypeScript Academy, dan kemajuan anda disegerakkan merentas web serta aplikasi CoddyKit. Kursus TypeScript Academy merangkumi sejumlah 4 pelajaran.

Jenis Literal Templat

Sistem jenis boleh memadankan corak pada jenis literal rentetan menggunakan jenis literal templat yang digabungkan dengan infer. Ini ialah alat teras untuk penghuraian rentetan aras jenis.

Notasi: TypeScript sebenar menulis jenis literal templat menggunakan rentetan yang dihadkan oleh tanda petik belakang dan mengandungi ruang penggantian dolar-kurungan. Dalam petikan ini, kami menunjukkan corak itu sebagai Tpl<...>, dengan menyenaraikan setiap bahagian mengikut urutan; contohnya, templat tanda petik belakang yang sepadan dengan awalan literal kemudian Rest ditunjukkan sebagai Tpl<'prefix', infer Rest>.

type StartsWithA<S> = S extends Tpl<'a', string> ? true : false;
// Tpl<'a', string> is a backtick template literal type: 'a' then anything

type X = StartsWithA<'abc'>; // true
type Y = StartsWithA<'bcd'>; // false

Membuat Inferens Sufiks

Letakkan infer di dalam templat untuk menangkap sebahagian daripada rentetan. Di sini, kami menangkap segala-galanya selepas "a" pada permulaan.

type AfterA<S> = S extends Tpl<'a', infer Rest> ? Rest : never;
// Tpl<'a', Rest> captures everything after a leading 'a'

type X = AfterA<'abc'>; // 'bc'

Memisahkan pada Pembatas

Untuk memisahkan rentetan pada kemunculan pertama pemisah, padankan corak "kepala, pembatas, ekor" dan buat inferens pada kedua-dua bahagian. Padanan pertama digunakan kerana inferens bagi kepala bersifat tamak dari sebelah kiri.

type SplitOnce<S, Sep extends string> =
  S extends Tpl<infer Head, Sep, infer Tail>
    ? [Head, Tail]
    : [S];
// Tpl<Head, Sep, Tail> matches up to the first separator

type X = SplitOnce<'a-b-c', '-'>; // ['a', 'b-c']

Pemisahan Rekursif

Untuk memisahkan kepada semua bahagian, lakukan rekursi pada ekor. Kumpulkan setiap kepala ke dalam tupel sehingga tiada pembatas yang tinggal.

type Split<S extends string, Sep extends string> =
  S extends Tpl<infer Head, Sep, infer Tail>
    ? [Head, ...Split<Tail, Sep>]
    : [S];
// recurse on Tail until no separator remains

type X = Split<'a.b.c', '.'>; // ['a', 'b', 'c']

Menelusuri Rekursi

Jejaki Split<"a.b.c", ".">:

  • Kepala "a", Ekor "b.c" -> ["a", ...Split<"b.c">]
  • Kepala "b", Ekor "c" -> ["b", ...Split<"c">]
  • "c" tidak mempunyai ".", kes asas -> ["c"]

Hasil: ["a", "b", "c"].

type X = Split<"one,two", ",">; // ["one", "two"]
type Y = Split<"x/y/z", "/">; // ["x", "y", "z"]

Mengendalikan Segmen Kosong

Pemisahan boleh menghasilkan rentetan kosong apabila pemisah bersebelahan atau berada di bahagian tepi. Corak itu masih sepadan dan membuat inferens terhadap Head atau Tail yang kosong.

type X = Split<"a,,b", ",">; // ["a", "", "b"]
type Y = Split<",a", ",">;   // ["", "a"]

Menggabungkan Semula

Operasi songsang bagi pemisahan ialah penggabungan: telusuri tupel rentetan dan gabungkannya dengan pembatas menggunakan literal templat. Operasi ini berpadanan secara semula jadi dengan pemisahan.

type Join<T extends string[], Sep extends string> =
  T extends [infer H extends string, ...infer R extends string[]]
    ? R extends [] ? H : Tpl<H, Sep, Join<R, Sep>>
    : '';
// Tpl<...> denotes a template literal type concatenation

type X = Join<['a', 'b', 'c'], '-'>; // 'a-b-c'

Memangkas Ruang Putih

Utiliti rentetan boleh digubah. Jenis Trim membuang ruang pada bahagian awal dan akhir dengan berulang kali menanggalkan satu ruang melalui inferens templat.

type TrimLeft<S extends string> =
  S extends Tpl<' ', infer R> ? TrimLeft<R> : S;
type TrimRight<S extends string> =
  S extends Tpl<infer R, ' '> ? TrimRight<R> : S;
type Trim<S extends string> = TrimRight<TrimLeft<S>>;
// Tpl<' ', R> strips a leading space; Tpl<R, ' '> strips a trailing one

type X = Trim<'  hi  '>; // 'hi'

Menggantikan Subrentetan

Penggantian dilakukan dengan memisahkan rentetan di sekeliling sasaran dan menggabungkannya semula dengan pengganti, semuanya melalui inferens templat dan rekursi.

type ReplaceAll<S extends string, From extends string, To extends string> =
  S extends Tpl<infer A, From, infer B>
    ? Tpl<A, To, ReplaceAll<B, From, To>>
    : S;
// split around From, then rejoin with To via template literal types

type X = ReplaceAll<'a-b-c', '-', '_'>; // 'a_b_c'

Mengapa Pemisahan Penting

Pemisahan ialah asas bagi penghuraian berstruktur. Laluan dipisahkan pada "/", rentetan query dipisahkan pada "&", dan baris CSV dipisahkan pada ",". Dengan Split, Anda menukar jenis rentetan rata menjadi tupel yang boleh diproses unsur demi unsur.

type Segments = Split<"users/42/posts", "/">; // ["users", "42", "posts"]

Berhati-hati dengan Kedalaman

Rekursi rentetan aras jenis dihadkan oleh had kedalaman pengompil. Rentetan yang sangat panjang atau terlalu banyak pemisah boleh melebihi had itu. Bagi masukan lazim seperti laluan dan format kecil, proses ini berjalan lancar.

type Ok = Split<"a/b/c/d/e", "/">; // fine for small strings

Semakan Pantas

Uji pemahaman Anda tentang pemisahan rentetan aras jenis.

Imbas Kembali

Anda telah memisahkan rentetan sepenuhnya dalam jenis.

  • Jenis literal templat bersama infer memadankan dan menangkap bahagian rentetan.
  • SplitOnce memisahkan pada pemisah pertama; rekursi menghasilkan Split yang lengkap.
  • Join, Trim dan ReplaceAll boleh digubah daripada alat yang sama.

Seterusnya: mengekstrak data berstruktur daripada jenis rentetan.

Percuma untuk bermula

Pelajari TypeScript dengan tutor kecerdasan buatan — percuma

Tulis dan jalankan kod sebenar dalam pelayar anda, dapatkan bantuan segera daripada tutor kecerdasan buatan yang tersedia 24/7, dan sambung semula dari tempat anda berhenti di web atau dalam aplikasi.

Kursus
101
Pelajaran
352

Soalan Lazim

Adakah pelajaran “Pemisahan Rentetan pada Aras Jenis” percuma?

Ya — teks penuh “Pemisahan Rentetan pada Aras Jenis” boleh dibaca secara percuma di web ini. Untuk berlatih secara interaktif menggunakan penyunting kod terbina dalam dan tutor kecerdasan buatan 24/7, serta membuka kunci baki kursus TypeScript Academy, tingkat taraf kepada CoddyKit PRO. Kursus TypeScript Academy merangkumi sejumlah 4 pelajaran.

Apakah yang akan saya pelajari dalam “Pemisahan Rentetan pada Aras Jenis”?

Pisahkan rentetan menjadi tuple dalam sistem jenis. Anda berlatih TypeScript Academy menggunakan kod praktikal yang dijalankan terus dalam pelayar, manakala tutor kecerdasan buatan 24/7 menjawab soalan anda semasa anda mengikuti pelajaran.

Adakah saya memerlukan pengalaman untuk memulakan TypeScript Academy?

Tiada pengalaman terdahulu diperlukan. Pembelajaran TypeScript Academy di CoddyKit disusun untuk pelajar daripada peringkat pemula hingga lanjutan, jadi anda boleh bermula di sini atau dari awal dan belajar mengikut kadar anda sendiri. Ini ialah pelajaran 2 daripada 4.

Berapa lamakah pelajaran “Pemisahan Rentetan pada Aras Jenis” diambil?

Kebanyakan pelajaran CoddyKit mengambil masa kira-kira 5–10 minit. Setiap pelajaran ringkas dan interaktif, jadi anda boleh membuat kemajuan secara berterusan dan menyambung tepat dari tempat anda berhenti di web atau aplikasi.

Bolehkah saya menulis dan menjalankan kod dalam pelajaran TypeScript Academy ini?

Ya. Setiap pelajaran TypeScript Academy menyertakan penyunting kod terbina dalam, jadi anda boleh menulis dan menjalankan kod sebenar terus dalam pelayar serta menerima maklum balas kecerdasan buatan serta-merta — tanpa memerlukan persediaan setempat.

Semua pelajaran dalam kursus ini

  1. Konsep Penggabung Penghurai
  2. Pemisahan Rentetan pada Aras Jenis
  3. Menghurai dengan Literal Templat
  4. Penghurai Laluan Mini pada Aras Jenis
← Kembali ke TypeScript Academy