TypeScript Academy · Oppitunti

Geneeristen tyyppien rajoitteet: tyyppiparametrien kaventaminen

Varmistakaa extends-avainsanalla geneeristen tyyppien rakennevaatimukset

Oppitunti 2/413 vaihetta

Geneeristen tyyppien rajoitteet: tyyppiparametrien kaventaminen 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.

Tervetuloa

Edistyneet geneeriset rajoitteet rajaavat tyyppiparametreina käytettävissä olevia tyyppejä ja mahdollistavat tyyppiturvalliset operaatiot monimutkaisilla rakenteilla.

Rajoitteiden kertaus

T extends U rajoittaa T:n tyyppeihin, jotka ovat U:n alityyppejä. Näin TypeScript tietää T:n rakenteen funktion sisällä.
function len<T extends { length: number }>(val: T): number {
  return val.length;
}

Rajoittaminen tiettyihin metodeihin

Vaatikaa, että T sisältää tietyn metodin rajoittamalla sen kyseisen metodin sisältävään interfaceen.
interface Stringable { toString(): string; }
function stringify<T extends Stringable>(val: T): string {
  return val.toString();
}

Päättele rajoitteesta

Käyttäkää keyof-avainsanaa rajoitteen sisällä turvallisten käyttöfunktioiden rakentamiseen.
function pluck<T, K extends keyof T>(items: T[], key: K): T[K][] {
  return items.map(item => item[key]);
}
const names = pluck(users, 'name'); // string[]

Korkeamman asteen rajoitteet (simuloituna)

TypeScript ei tue aitoja korkeamman asteen tyyppejä, mutta voitte simuloida niitä ehdollisilla tyypeillä ja rajoitteilla.

Rajoittaminen primitiivityyppeihin

Rajoittakaa tyyppiparametrit tiettyihin primitiivityyppeihin erikoistuneita funktioita varten.
type Primitive = string | number | boolean | bigint | symbol | null | undefined;
function isPrimitive<T extends Primitive>(val: T): true { return true; }

Rekursiiviset rajoitteet

Rajoitteet voivat viitata itseensä rekursiivisia rakenteita varten.
interface Comparable<T> { compareTo(other: T): number; }
function sort<T extends Comparable<T>>(items: T[]): T[] {
  return [...items].sort((a, b) => a.compareTo(b));
}

Rajoite oletusarvolla

Tyyppiparametrilla voi olla sekä rajoite että oletusarvo. Oletusarvon on täytettävä rajoite.
function process<T extends object = Record<string, unknown>>(data: T): void {
  console.log(Object.keys(data));
}

T extends Record<string, unknown>

Rajoittakaa tyyppi tietuetyyppiin dynaamisen ominaisuuksien käytön mahdollistamiseksi.
function getValue<T extends Record<string, unknown>>(obj: T, key: string): unknown {
  return obj[key];
}

Rajoitteen päättely paluutyypeissä

Kun T:llä on rajoite, TypeScript käyttää rajoitetta määrittääkseen paluutyypillä sallitut operaatiot.
function firstKey<T extends object>(obj: T): keyof T {
  return Object.keys(obj)[0] as keyof T;
}

NoInfer-apuohjelma (TS 5.4)

TypeScript 5.4 esitteli NoInfer-tyypin, jolla voidaan estää tyyppiparametrin päättely tietystä argumentin kohdasta.
function createState<T>(initial: T, fallback: NoInfer<T>): T {
  return initial ?? fallback;
}

Pikatarkistus

Mitä `T extends { length: number }` lisää T:n tietoihin geneerisen funktion sisällä?

Kertaus

Edistyneet rajoitteet rajaavat geneeriset tyypit tiettyihin rakenteisiin, metodeihin tai primitiivien unioneihin. Yhdistämällä ne keyof-avainsanaan, rekursiivisiin rakenteisiin ja oletusarvoihin voitte rakentaa tehokkaita tyyppiturvallisia apuohjelmia.
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 ”Geneeristen tyyppien rajoitteet: tyyppiparametrien kaventaminen” ilmainen?

Kyllä – oppitunnin ”Geneeristen tyyppien rajoitteet: tyyppiparametrien kaventaminen” 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 ”Geneeristen tyyppien rajoitteet: tyyppiparametrien kaventaminen”?

Varmistakaa extends-avainsanalla geneeristen tyyppien rakennevaatimukset 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 ”Geneeristen tyyppien rajoitteet: tyyppiparametrien kaventaminen”-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. keyof ja indeksoidun käytön tyypit
  2. Geneeristen tyyppien rajoitteet: tyyppiparametrien kaventaminen
  3. Ehdolliset tyypit: T extends U ? X : Y
  4. Distributiiviset ehdolliset tyypit
← Takaisin: TypeScript Academy