Skip to content

TypeScriptin geneeriset tyypit selitettynä

Geneeriset mallit, joihin tartut, ryhmiteltynä tehtävän mukaan: esittele tyyppiparametri, rajoita sitä, anna oletus, haaraudu ehdollisella tyypillä, sieppaa inferillä ja muunna muotoa. Jokainen rivi parittaa mallin yksiriviseen esimerkkiin.

Geneerinen tyyppi on tyyppiparametri: paikkamerkki tyypille, jonka kutsuja valitsee, joten yksi funktio tai tyyppi toimii monille muodoille menettämättä tarkkuutta. Lue <T> merkityksessä ”jollekin tyypille T”. Voima syntyy T:n rajoittamisesta, siihen haarautumisesta ja sen yli muuntamisesta. Alla olevat mallit ovat työsanasto.

Referenssitaulukko · 28 merkintää
28 of 28 rows
Esittele
Tyyppiparametri, jonka kutsuja valitsee.function first<T>(xs: T[]): T
Useita toisistaan riippumattomia tyyppiparametreja.function pair<T, U>(a: T, b: U): [T, U]
Toinen parametri, joka on sidottu ensimmäisen avaimiin.function get<T, K extends keyof T>(o: T, k: K): T[K]
Luokka, jolla on tyyppiparametri kentissään ja metodeissaan.class Box<T> { value: T }
Oliomuoto, jolla on tyyppiparametri.interface Result<T> { data: T }
Tyyppiparametri nuolifunktiossa; perässä oleva pilkku estää .tsx-tiedostoja tulkitsemasta sitä JSX:ksi.const first = <T,>(xs: T[]): T => xs[0]
Rajoita
Vaatii, että T on sijoitettavissa tyyppiin Type.function len<T extends { length: number }>(x: T)
Rajoittaa T:n jonkin toisen tyypin avaimeksi.type Keys<O> = keyof O
Rajoittaa T:n konstruktoitavaan luokkaan.function make<C extends new () => C>(c: C): C
Vaatii, että T täyttää useita rajoitteita yhtä aikaa.function log<T extends Error & { code: number }>(e: T)
Rajoittaa mihin tahansa; pitää parametrin geneerisenä kaventamatta sitä.type Wrap<T> = T extends unknown ? { v: T } : never
Oletus ja infer
Antaa T:lle oletusarvon, kun kutsuja jättää sen pois.function parse<T = string>(): T
Sieppaa tyypin ehdollisen tyypin sisäpuolelta.type El<T> = T extends Array<infer I> ? I : never
Purkaa sisäkkäisen Promisen sisimpään tyyppiinsä.type Data = Awaited<Promise<User>>
Sieppaa yhden osan template literal -tyypistä.type Path<S> = S extends `/api/${infer R}` ? R : never
Tarkistaa koko unionin kerralla; paljas T päättelee yhden jäsenen kerrallaan.type El<T> = [T] extends [Array<infer I>] ? I : never
Ehdolliset ja mapped-tyypit
Valitsee tyypin sen mukaan, onko T sijoitettavissa tyyppiin U.type IsStr<T> = T extends string ? true : false
Rakentaa uuden oliotyypin muuntamalla T:n jokaisen avaimen.type Frozen<T> = { [K in keyof T]: Readonly<T[K]> }
Olio, jonka avaimet ovat K ja arvot V.type Scores = Record<string, number>
Sisäänrakennetut geneeriset tyypit, jotka on johdettu yllä olevista malleista.type Preview = Pick<User, "id" | "name">
Paljas T ennen extends-avainsanaa suoritetaan kerran per unionin jäsen ja tulokset yhdistetään unioniksi.ToArray<'a' | 'b'> = 'a'[] | 'b'[]
Lisää tai poistaa määritteitä muunnettujen avaimien kohdalta.type Req<T> = { [K in keyof T]-?: T[K] }
Ajonaikaisen arvon avaimet tyyppinä.const opts = { a: 1 }; type K = keyof typeof opts
Rakentaa merkkijonotyypin muista merkkijonotyypeistä.type Route = `/users/${string}`
Liittää tupletyypit päästä päähän.type Concat<T extends unknown[], U extends unknown[]> = [...T, ...U]
Tyyppi, jonka määritelmä viittaa itseensä.type Json = string | number | Json[] | { [k: string]: Json }
Tarkistaa arvon tyyppiä vasten ja säilyttää sen kapeamman literaalityypin.const c = { dark: "#000" } satisfies Record<string, string>
Säilyttää kutsujan literaalityypin sen laajentamisen sijaan (TS 5.0).function first<const T>(xs: readonly T[]): T