TypeScript Academy · Oppitunti

Tyyppiturvallinen kyselyiden muodostus

Rakentakaa kyselyitä, jotka hylkäävät virheelliset sarakkeet jo käännösaikana.

Oppitunti 2/413 vaihetta

Tyyppiturvallinen kyselyiden muodostus 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.

Kyselyt eivät voi viitata tuntemattomiin sarakkeisiin

Tyypitysturvallinen kyselyrakentaja hylkää taulukossa olemattomien sarakkeiden nimet jo käännösaikana. Sarakkeisiin viitataan tyypitettyjen objektien, ei raakojen merkkijonojen, kautta.

Tyypitetyt sarakeviittaukset

Kun taulukko on määritelty, jokainen sarake on taulukko-objektin ominaisuus. Suodattimille ja select-operaatioille välitetään nämä ominaisuudet, ei merkkijonoja.

import { eq } from "drizzle-orm";

// users.id and users.name are typed column objects
const rows = await db
  .select()
  .from(users)
  .where(eq(users.id, 1));

Tuntematon sarake = käännösvirhe

Koska sarakkeet ovat todellisia ominaisuuksia, kirjoitusvirheet havaitaan heti. Merkkijonoihin perustuvaa kiertotietä ei ole.

await db.select().from(users).where(eq(users.idd, 1));
//                                          ^^^^ 
// Error: Property "idd" does not exist on the users table.

Tyypitetyt vertailuoperandit

eq-operaattorien kaltaiset operaattorit ovat saraketyypin suhteen geneerisiä. Numerosarakkeen vertaaminen merkkijonoon on tyyppivirhe.

eq(users.age, 30);       // ok: age is number
eq(users.age, "thirty"); // Error: string is not assignable to number

Tiettyjen sarakkeiden valitseminen

Välittäkää objekti, jonka arvoja ovat sarakeviittaukset, jos haluatte valita osajoukon. Valitsemistanne avaimista tulee tuloksen avaimet.

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

Muiden taulukoiden sarakkeiden hylkääminen

Select-kuvaus rajoittuu kyselyssä käsiteltävien taulukoiden sarakkeisiin. Liittymättömän taulukon sarakkeeseen viittaaminen aiheuttaa käännösvirheen.

await db
  .select({ title: posts.title }) // posts not in this query
  .from(users);
// Error: posts.title is not part of the FROM clause.

Koostettavat ehdot

Ehtoja voi yhdistää and-, or- ja not-operaatioilla. Jokainen osa säilyy tyypitettynä, joten virheellinen ehto havaitaan myös syvällä ehtopuussa.

import { and, gt, eq } from "drizzle-orm";

const q = db.select().from(users).where(
  and(gt(users.age, 18), eq(users.isAdmin, false))
);

Järjestäminen ja rajoittaminen

orderBy ottaa myös tyypitettyjä sarakeviittauksia, joten taulukossa olemattoman sarakkeen mukaan ei voi järjestää.

import { desc } from "drizzle-orm";

await db.select().from(users).orderBy(desc(users.age)).limit(10);

Miten hylkääminen toimii

Rakentaja on taulukkotyypin suhteen geneerinen. where- ja select-allekirjoitukset hyväksyvät vain tyypin Column<TTable> arvoja, joten kääntäjä hylkää rakenteellisesti kaiken muun.

// Conceptual signature
declare function select<T>(
  table: T,
  cols: { [k: string]: ColumnOf<T> }
): Query;

Myös insertit ovat tyypitettyjä

Insert-arvot tarkistetaan insert-mallia vasten. Puuttuvat pakolliset kentät tai väärän tyyppiset arvot aiheuttavat käännösvirheen ennen SQL:n suorittamista.

await db.insert(users).values({
  name: "Ada",
  isAdmin: false,
  // missing fields would error; extra unknown keys error too
});

Miksi tästä on hyötyä

Useimmat ORM-virheet johtuvat uudelleennimetystä tai väärin kirjoitetusta sarakkeesta, joka havaitaan vasta ajonaikana. Tyypitysturvallinen rakentaja muuttaa nämä editorin punaisiksi aaltoviivoiksi jo kauan ennen käyttöönottoa.

Pikatarkistus

Varmistakaa, että hallitsette tyypitysturvallisten kyselyiden muodostamisen.

Kertaus

Tyypitysturvallisessa kyselyiden muodostamisessa käytetään tyypitettyjä sarakeviittauksia merkkijonojen sijaan. Tuntemattomat sarakkeet, väärän tyyppiset operandit ja taulukoiden FROM-lauseen ulkopuoliset sarakkeet muuttuvat käännösvirheiksi. Rakentaja on taulukon suhteen geneerinen, joten tyyppijärjestelmä varmistaa kelvollisuuden rakenteellisesti.

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 ”Tyyppiturvallinen kyselyiden muodostus” ilmainen?

Kyllä – oppitunnin ”Tyyppiturvallinen kyselyiden muodostus” 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 ”Tyyppiturvallinen kyselyiden muodostus”?

Rakentakaa kyselyitä, jotka hylkäävät virheelliset sarakkeet jo käännösaikana. 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 ”Tyyppiturvallinen kyselyiden muodostus”-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