Merkkijonojen jakaminen tyyppitasolla
Jakakaa merkkijonoja monikoiksi tyyppijärjestelmän sisällä.
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'>; // falseSuffiksin 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 stringsPikatarkistus
Testatkaa ymmärrystänne tyyppitason merkkijonojen pilkkomisesta.
Kertaus
Jaoitte merkkijonoja kokonaan tyyppien avulla.
- Mallimerkkijonotyypit ja
infersovittavat ja kaappaavat merkkijonon osia. SplitOncepilkkoo ensimmäisen erottimen kohdalta; rekursion avulla saadaan täydellinenSplit.- Join, Trim ja ReplaceAll koostuvat samoista työkaluista.
Seuraavaksi: rakenteisten tietojen poimiminen merkkijonotyypeistä.
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
- Parser combinator -käsitteet
- Merkkijonojen jakaminen tyyppitasolla
- Jäsentäminen template literal -tyypeillä
- Pieni tyyppitason reittijäsennin