TypeScript Academy · Oppitunti

Merkkijonojen jakaminen tyyppitasolla

Jakakaa merkkijonoja monikoiksi tyyppijärjestelmän sisällä.

Oppitunti 2/413 vaihetta

Merkkijonojen jakaminen tyyppitasolla on ilmainen TypeScript Academy-oppitunti CoddyKitissä. Tämä on oppitunti 2/4. Voit lukea koko oppitunnin alta ilmaiseksi ja harjoitella sen jälkeen käytännössä selaimessa sisäänrakennetulla koodieditorilla ja ympäri vuorokauden käytettävissä olevan tekoälytuutorin avulla. Oppitunti kuuluu TypeScript Academy-oppimispolkuun, ja edistymisesi synkronoituu verkon ja CoddyKit-sovelluksen välillä. TypeScript Academy-kurssilla on yhteensä 4 oppituntia.

Mallimerkkijonotyypit

Tyyppijärjestelmä voi sovittaa merkkijonoliteraalityyppejä mallimerkkijonotyyppien ja infer-avainsanan avulla. Tämä on keskeinen työkalu merkkijonojen jäsentämiseen tyyppitasolla.

Merkintätapa: TypeScriptissä mallimerkkijonotyypit kirjoitetaan oikeasti takamerkeillä rajattuina merkkijonoina, jotka sisältävät dollarimerkki-aaltosulke-paikkoja. Näissä katkelmissa esitämme kuvion muodossa Tpl<...> ja luettelemme osat järjestyksessä. Esimerkiksi literaaliprefiksiin ja sen jälkeen Rest-muuttujaan täsmäävä takamerkkimalli näkyy muodossa 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

Suffiksin päättely

Sijoittamalla infer mallin sisään voitte kaapata osan merkkijonosta. Tässä kaapataan kaikki alussa olevan "a"-merkin jälkeen.

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'

Jakaminen erotinmerkin kohdalta

Jakaaksenne merkkijonon erottimen ensimmäisestä esiintymästä sovittakaa kuvioon "alkuosa, erotin, loppuosa" ja päätelkää molemmat puolet. Ensimmäinen täsmäys voittaa, koska päättely etenee alkuosan osalta ahneesti vasemmalta.

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']

Rekursiivinen jako

Jakaaksenne kaikki osat jatkakaa rekursiota loppuosan käsittelyyn. Kootkaa kukin alkuosa tuplena, kunnes erotinta ei enää ole.

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']

Rekursion seuraaminen

Seuratkaa koodin Split<"a.b.c", "."> toimintaa:

  • Head "a", Tail "b.c" -> ["a", ...Split<"b.c">]
  • Head "b", Tail "c" -> ["b", ...Split<"c">]
  • "c" ei sisällä "."-erotinta, joten kyseessä on perustapaus -> ["c"]

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

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

Tyhjien osien käsittely

Jakaminen voi tuottaa tyhjiä merkkijonoja, kun erottimet ovat vierekkäin tai merkkijonon reunoilla. Kuvio täsmää silti ja päättely tuottaa tyhjän Head- tai Tail-osan.

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

Yhdistäminen takaisin

Jaon käänteisoperaatio on yhdistäminen: käykää merkkijonojen tupla läpi ja ketjuttakaa osat erottimella käyttäen mallimerkkijonoa. Tämä sopii luontevasti yhteen jaon kanssa.

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'

Tyhjätilan poistaminen

Merkkijonojen apukeinoja voidaan yhdistellä. Trim-tyyppi poistaa alussa ja lopussa olevat välilyönnit poistamalla välilyönnin toistuvasti mallipäättelyn avulla.

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'

Osamerkkijonojen korvaaminen

Korvaaminen toimii jakamalla kohdemerkkijonon kohdalta ja yhdistämällä osat uudelleen korvaavalla merkkijonolla, kaikki mallipäättelyn ja rekursion avulla.

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'

Miksi jakaminen on tärkeää

Jakaminen on rakenteisen jäsentämisen perusta. Reitit jaetaan "/"-merkin kohdalta, kyselymerkkijonot "&"-merkin kohdalta ja CSV-rivit ","-merkin kohdalta. Split-tyypillä muutatte litteän merkkijonotyypin tuplaksi, jota voitte käsitellä alkio kerrallaan.

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

Syvyyden rajoitukset

Tyyppitason merkkijonorekursion syvyyttä rajoittaa kääntäjän syvyysraja. Hyvin pitkät merkkijonot tai useat erottimet voivat ylittää sen. Tyypillisillä syötteillä, kuten poluilla ja pienillä muodoilla, se toimii sujuvasti.

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

Pikatarkistus

Testatkaa ymmärrystänne tyyppitason merkkijonojen pilkkomisesta.

Kertaus

Jaoitte merkkijonoja kokonaan tyyppien avulla.

  • Mallimerkkijonotyypit ja infer sovittavat ja kaappaavat merkkijonon osia.
  • SplitOnce pilkkoo ensimmäisen erottimen kohdalta; rekursion avulla saadaan täydellinen Split.
  • Join, Trim ja ReplaceAll koostuvat samoista työkaluista.

Seuraavaksi: rakenteisten tietojen poimiminen merkkijonotyypeistä.

Aloita maksutta

Opi TypeScript tekoälytuutorin avulla — ilmaiseksi

Kirjoita ja suorita oikeaa koodia selaimessa, saa välitöntä apua tekoälytuutorilta ympäri vuorokauden ja jatka siitä, mihin jäit, verkossa tai sovelluksessa.

Kurssit
101
Oppitunnit
352

Usein kysytyt kysymykset

Onko oppitunti ”Merkkijonojen jakaminen tyyppitasolla” ilmainen?

Kyllä – oppitunnin ”Merkkijonojen jakaminen tyyppitasolla” koko tekstin voi lukea täällä verkossa ilmaiseksi. Jos haluat harjoitella interaktiivisesti sisäänrakennetulla koodieditorilla ja ympäri vuorokauden käytettävissä olevan tekoälytuutorin avulla sekä avata koko TypeScript Academy-kurssin, päivitä CoddyKit PROhon. TypeScript Academy-kurssilla on yhteensä 4 oppituntia.

Mitä opin oppitunnilla ”Merkkijonojen jakaminen tyyppitasolla”?

Jakakaa merkkijonoja monikoiksi tyyppijärjestelmän sisällä. Harjoittelet TypeScript Academy-aihetta koodilla, jonka suoritat suoraan selaimessa. Ympäri vuorokauden käytettävissä oleva tekoälytuutori vastaa kysymyksiisi oppitunnin aikana.

Tarvitsenko kokemusta aloittaakseni TypeScript Academy-opiskelun?

Aiempi kokemus ei ole tarpeen. CoddyKitin TypeScript Academy-oppimispolku sopii vasta-alkajista edistyneisiin, joten voit aloittaa tästä tai alusta ja edetä omaan tahtiisi. Tämä on oppitunti 2/4.

Kuinka kauan ”Merkkijonojen jakaminen tyyppitasolla”-oppitunnin suorittaminen kestää?

Useimmat CoddyKitin oppitunnit kestävät noin 5–10 minuuttia. Jokainen oppitunti on lyhyt ja interaktiivinen, joten edistyt tasaisesti ja voit jatkaa siitä, mihin jäit – sekä verkossa että sovelluksessa.

Voinko kirjoittaa ja suorittaa koodia tällä TypeScript Academy-oppitunnilla?

Kyllä. Jokainen TypeScript Academy-oppitunti sisältää sisäänrakennetun koodieditorin, joten voit kirjoittaa ja suorittaa oikeaa koodia suoraan selaimessa ja saada välitöntä palautetta tekoälyltä – paikallista asennusta ei tarvita.

Kaikki tämän kurssin oppitunnit

  1. Parser combinator -käsitteet
  2. Merkkijonojen jakaminen tyyppitasolla
  3. Jäsentäminen template literal -tyypeillä
  4. Pieni tyyppitason reittijäsennin
← Takaisin: TypeScript Academy