TypeScript Academy · Oppitunti

satisfies ja tyyppimerkintä

Säilyttäkää literaalien päättely ja tarkistakaa samalla rakenteen oikeellisuus.

Oppitunti 2/413 vaihetta

satisfies ja tyyppimerkintä 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.

Tyyppimerkintämalli

Klassinen malli const config: Type = {...} validoi olion, mutta muuttujan tyypiksi tulee Type, mikä laajentaa kaikki sen sisältämät literaalit.

type Config = { mode: string; level: number };
const config: Config = { mode: "dark", level: 5 };
// config.mode has type string
console.log(config.mode);

Miltä tyypin laajeneminen näyttää

Tyyppimerkinnän kanssa config.mode on tyyppiä string. Ette voi sijoittaa sitä muuttujaan, joka odottaa literaalia "dark".

type Config = { mode: string };
const config: Config = { mode: "dark" };
// const m: "dark" = config.mode; // Error: string not assignable to "dark"
console.log(config.mode);

satisfies-malli

Kun käytätte muotoa const config = {...} satisfies Type, muuttuja säilyttää täsmällisen päätellyn tyyppinsä, mutta se tarkistetaan edelleen tyyppiä Type vasten.

type Config = { mode: string; level: number };
const config = { mode: "dark", level: 5 } satisfies Config;
// config.mode has type "dark"
console.log(config.mode);

Täsmällinen päättely säilyy

Nyt config.mode on literaali "dark", joten se toimii kaikkialla, missä tarvitaan kapeaa tyyppiä.

type Config = { mode: string };
const config = { mode: "dark" } satisfies Config;
const m: "dark" = config.mode; // OK
console.log(m);

Molemmat validoivat edelleen

Molemmat mallit hylkäävät virheelliset oliot. Ero on ainoastaan tuloksena syntyvässä muuttujan tyypissä, ei siinä, tapahtuuko validointi.

type Config = { level: number };
// const a: Config = { level: "x" }; // Error
// const b = { level: "x" } satisfies Config; // Error
const ok = { level: 3 } satisfies Config;
console.log(ok.level);

Ylimääräiset ominaisuudet havaitaan

Tyyppimerkintöjen tavoin satisfies ilmoittaa kohdetyyppiin kuulumattomista ylimääräisistä ominaisuuksista ja auttaa siten havaitsemaan avainten kirjoitusvirheet.

type Config = { mode: string };
// const c = { mode: "dark", extar: true } satisfies Config; // Error: extar
const c = { mode: "dark" } satisfies Config;
console.log(c.mode);

Tuple-tyypin säilyttäminen

satisfies auttaa taulukoita säilyttämään tuple-tyyppisen täsmällisyyden, kun sitä käytetään yhdessä as const-lausekkeen kanssa, ja validoi samalla alkioiden tyypit.

type Nums = readonly number[];
const xs = [1, 2, 3] as const satisfies Nums;
// xs is a readonly tuple [1, 2, 3], validated as numbers
console.log(xs.length);

Tyyppimerkintä laajentaa unionin jäseniä

Jos kenttä on unioni, kuten "a" | "b", unioniksi tyypitetty tyyppimerkintä säilyttää sen unionina, mutta laajempi kentän tyyppi laajentaa sitä. satisfies kiinnittää täsmällisen jäsenen.

type Config = { tier: string };
const withAnn: Config = { tier: "pro" };       // tier: string
const withSat = { tier: "pro" } satisfies Config; // tier: "pro"
console.log(withAnn.tier, withSat.tier);

Automaattisen täydennyksen säilyttäminen luettaessa

Koska satisfies säilyttää literaaliavaimet ja -arvot, editorit voivat tarjota automaattisen täydennyksen täsmällisen olion eivätkä laajemman ilmoitetun tyypin perusteella.

type Theme = Record<string, string>;
const theme = { bg: "black", fg: "white" } satisfies Theme;
// theme.<autocomplete shows bg and fg>
console.log(theme.bg, theme.fg);

Valinta vaihtoehtojen välillä

Käyttäkää tavallista tyyppimerkintää, kun todella haluatte laajemman tyypin. Käyttäkää satisfies-operaattoria, kun haluatte validoinnin mutta tarvitsette myöhemmin myös täsmällisen päätellyn rakenteen.

type Config = { mode: string };
// Want wide type for reassignment flexibility -> annotation
let a: Config = { mode: "dark" };
// Want exact literals for later indexing -> satisfies
const b = { mode: "dark" } satisfies Config;
console.log(a.mode, b.mode);

Yhteenveto rinnakkain

Tyyppimerkintä laajentaa, satisfies säilyttää. Molemmat validoivat. Muuttumattomille konfiguraatioille, joista luetaan tietoja, satisfies on yleensä parempi oletusvalinta.

type C = { color: string; size: number };
const widened: C = { color: "red", size: 1 };
const exact = { color: "red", size: 1 } satisfies C;
console.log(widened.color, exact.color);

Pikatarkistus: satisfies ja tyyppimerkintä

Testatkaa ymmärrystänne niiden erosta.

Kertaus: satisfies ja tyyppimerkintä

Tyyppimerkintä validoi, mutta laajentaa literaalit perustyypeikseen. satisfies-operaattori validoi ja säilyttää täsmällisen päättelyn, mukaan lukien literaaliarvot, avaimet ja tuple-tarkkuuden.

type C = { mode: string };
const c = { mode: "dark" } satisfies C;
const exact: "dark" = c.mode;
console.log(exact);
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 ”satisfies ja tyyppimerkintä” ilmainen?

Kyllä – oppitunnin ”satisfies ja tyyppimerkintä” 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 ”satisfies ja tyyppimerkintä”?

Säilyttäkää literaalien päättely ja tarkistakaa samalla rakenteen oikeellisuus. 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 ”satisfies ja tyyppimerkintä”-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. Miksi satisfies on olemassa
  2. satisfies ja tyyppimerkintä
  3. satisfies ja as-väite
  4. satisfies-käytännön mallit
← Takaisin: TypeScript Academy