TypeScript Academy · Oppitunti

Kyselytulosten muodon päättely

Antakaa kyselyrakentajan päätellä palautettavan rivin tyypin.

Oppitunti 3/413 vaihetta

Kyselytulosten muodon päättely on ilmainen TypeScript Academy-oppitunti CoddyKitissä. Tämä on oppitunti 3/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.

Tulostyyppi seuraa valintaa

Hyvä kyselyrakentaja ei ainoastaan tarkista syötettä, vaan myös päättelee jokaisen tulosrivin täsmällisen rakenteen valittujen sarakkeiden perusteella. Kun valitsette vähemmän sarakkeita, tulostyyppi supistuu.

Koko rivin valitseminen

Kutsumalla select()-funktiota ilman projektiota saatte koko rivityypin.

const rows = await db.select().from(users);
// rows: { id: number; name: string; age: number | null; isAdmin: boolean }[]

Osittainen valinta supistaa tyyppiä

Valitkaa vain tarvitsemanne sarakkeet, jolloin tulostyyppi sisältää ainoastaan nämä avaimet.

const rows = await db
  .select({ id: users.id, name: users.name })
  .from(users);
// rows: { id: number; name: string }[]
// Accessing rows[0].age is a compile error.

Sarakkeiden uudelleennimeäminen tuloksessa

Select-objektin avaimista tulee tuloksen avaimet, joten voitte nimetä sarakkeet vapaasti ja tyyppi kuvastaa uusia nimiä.

const rows = await db
  .select({ userId: users.id, fullName: users.name })
  .from(users);
// rows: { userId: number; fullName: string }[]

Lasketut ja aggregoidut sarakkeet

Aggregaateilla on oma päätelty tyyppinsä. count() tuottaa luvun, ja alias-avain antaa sille nimen tuloksessa.

import { count } from "drizzle-orm";

const rows = await db
  .select({ total: count() })
  .from(users);
// rows: { total: number }[]

Nullattavuus kulkee mukana

Jos valitsette nullattavan sarakkeen, sen nullattavuus säilyy tuloksessa. age-sarakkeen valitseminen säilyttää tyypin number | null.

const rows = await db.select({ age: users.age }).from(users);
// rows: { age: number | null }[]

Miten päättely muodostetaan

Tulostyyppi on select-objektin päällä muodostettu mapped type: jokainen arvo on sarake, jonka data-tyyppi ja nullattavuus luetaan vastaavalle avaimelle.

type InferSelect<S> = {
  [K in keyof S]: S[K] extends Column<infer D, infer Null>
    ? Null extends true ? D | null : D
    : never;
};

Yksittäisen rivin apumenetelmät

Jotkin rakentajat tarjoavat .get()- tai [0]-käytön. Alkion tyyppi johdetaan edelleen samasta valinnasta, mutta taulukosta irrotettuna.

const one = (await db.select({ id: users.id }).from(users))[0];
// one: { id: number } | undefined

Liitokset laajentavat rakennetta

Kun teette liitoksen, tulostyyppi saa avaimia liitetystä taulukosta. Osittaiset valinnat liitetyistä taulukoista supistavat tyyppiä edelleen täsmällisesti. (Liitoksilla on oma oppituntinsa.)

const rows = await db
  .select({ name: users.name, title: posts.title })
  .from(users)
  .innerJoin(posts, eq(posts.authorId, users.id));
// rows: { name: string; title: string }[]

Miksi supistaminen on tärkeää

Vain valitsemienne avainten palauttaminen estää tukeutumisen vahingossa sarakkeisiin, joita ette hakeneet. Tyyppi vastaa todellista SQL:ää, joten liian monen tai liian harvan sarakkeen hakemiseen liittyvät virheet tulevat näkyviin editorissa.

Kompastuskivi: levittäminen ja poimiminen

Jos haette koko rivin ja poimitte sitten avaimet manuaalisesti JavaScriptissä, menetätte tietokantatason supistamisen hyödyn ja lähetätte verkon yli ylimääräisiä sarakkeita. Suosikaa supistamista jo kyselyssä.

Pikatarkistus

Varmistakaa, että ymmärrätte päätellyt tulosrakenteet.

Kertaus

Tulostyyppi lasketaan valinnan perusteella mapped typen avulla: täydet valinnat palauttavat koko rivin, osittaiset valinnat supistuvat valittuihin avaimiin, uudelleennimeäminen muuttaa tuloksen avaimia, nullattavuus kulkee mukana ja aggregaateilla on omat tyyppinsä. Staattinen tyyppi vastaa aina kirjoittamaanne SQL:ää.

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 ”Kyselytulosten muodon päättely” ilmainen?

Kyllä – oppitunnin ”Kyselytulosten muodon päättely” 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 ”Kyselytulosten muodon päättely”?

Antakaa kyselyrakentajan päätellä palautettavan rivin tyypin. 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 3/4.

Kuinka kauan ”Kyselytulosten muodon päättely”-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. Skeemasta tyypiksi -kuvaus
  2. Tyyppiturvallinen kyselyiden muodostus
  3. Kyselytulosten muodon päättely
  4. Relaatiot ja liitokset tyyppien avulla
← Takaisin: TypeScript Academy