TypeScript Academy · Oppitunti

void-tyyppi funktioissa

Selvittäkää, miten void eroaa undefined-tyypistä funktion paluuarvon yhteydessä.

Oppitunti 3/413 vaihetta

void-tyyppi funktioissa 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.

void-palautustyyppi

void kuvaa funktiota, joka ei palauta hyödyllistä arvoa. Funktio suoritetaan silti loppuun; se ei vain tuota arvoa, jota pitäisi käyttää. Se on sellaisten funktioiden tyyppi, joita kutsutaan sivuvaikutustensa vuoksi.

function log(message: string): void {
  console.log(message);
}
log('Hello void');

Päätelty void

Jos funktiossa ei ole return-lausetta tai siinä on vain paljas return;, TypeScript päättelee void-tyypin automaattisesti. Sitä tarvitsee harvoin kirjoittaa eksplisiittisesti, vaikka sen kirjoittaminen dokumentoi tarkoituksen.

function greet(name: string) {
  console.log('Hi ' + name);
  // no return -> inferred void
}
greet('Ada');

void ja undefined

Ne liittyvät toisiinsa, mutta eivät ole sama asia. void-tyyppinen funktio saattaa palauttaa ajonaikaisesti undefined-arvon tai olla palauttamatta sitä, eikä sen palautusarvoon pidä luottaa. Funktion, jonka palautustyypiksi on määritetty undefined, on palautettava se eksplisiittisesti.

function a(): void { /* returns nothing useful */ }
function b(): undefined { return undefined; }
console.log(a(), b());

void-tulosta ei pidä käyttää

void-kutsun ajonaikainen arvo on undefined, mutta tyyppijärjestelmä ei kannusta käyttämään sitä. Käsitelkää void-tyyppi merkityksessä ’ohittakaa tämä palautusarvo’.

function save(): void {
  console.log('saved');
}
const result = save(); // result has type void
console.log(result); // undefined at runtime

void callback-tyypeissä

Hienovarainen mutta tehokas sääntö: callback, jonka palautustyypiksi on määritetty void, voi saada toteutuksekseen funktion, joka palauttaa minkä tahansa arvon. Ylimääräinen palautusarvo yksinkertaisesti ohitetaan.

type Handler = () => void;

const h: Handler = () => 42; // returns number, still fine
h();
console.log('Returned value is ignored by callers');

Miksi tämä sääntö on olemassa

Tämän joustavuuden ansiosta voit välittää arr.push-funktion kaltaisia funktioita void-callbackeiksi, vaikka ne palauttavat numeron. Kutsuja lupasi olla käyttämättä palautusarvoa, joten mikä tahansa palautusarvo on harmiton.

const items: number[] = [];
const nums = [1, 2, 3];
nums.forEach((n) => items.push(n)); // push returns number, ok
console.log(items);

Kontekstuaalinen void taulukkometodeissa

forEach odottaa callbackia, joka palauttaa void-tyypin. Siksi voit kirjoittaa yksirivisen nuolifunktion, joka palauttaa sivutuotteena arvon ilman virhettä – kontekstuaalinen void-tyyppi ottaa sen vastaan.

const result: string[] = [];
['a', 'b'].forEach((x) => result.push(x.toUpperCase()));
console.log(result);

Yleinen sekaannus

void-callback-sääntö koskee callbackin tyyppiä, ei funktioita, joiden oma merkitty palautustyyppi on void. Funktio, joka on ilmoitettu muodossa (): void, ei edelleenkään voi sisältää return value;-lausetta, jossa palautetaan muu kuin undefined-arvo.

function f(): void {
  return; // ok
  // return 5; // Error: 5 not assignable to void
}
f();
console.log('declared void cannot return a value');

void-parametrit ovat epätavallisia

Vaikka void esiintyy parametrin tyyppinä harvoin, sitä voidaan käyttää kehittyneissä geneerisissä tyypeissä. Tavallisessa koodissa se esiintyy lähes aina palautustyyppinä, joka ilmaisee, ettei merkityksellistä tulosta ole.

type Listener = (event: string) => void;

const onClick: Listener = (e) => console.log('Event:', e);
onClick('click');

void ja Promiset

Asynkroniset funktiot palauttavat usein tyypin Promise<void>, kun ne suorittavat työn mutta valmistuvat ilman palautusarvoa. Tämä vastaa synkronisen koodin void-mallia asynkronisessa koodissa.

async function sync(): Promise<void> {
  console.log('syncing...');
  // resolves with no value
}
sync().then(() => console.log('done'));

Käytä void-tyyppiä harkiten

Määritä palautustyypiksi void, kun haluat ilmaista, että funktio on olemassa sivuvaikutustensa vuoksi eivätkä kutsujat saa riippua palautusarvosta. Tämä selkeyttää tarkoitusta ja antaa joustavan callback-säännön toimia hyväksesi.

function notify(msg: string): void {
  console.log('NOTIFY:', msg);
}
const handlers: Array<(m: string) => void> = [notify];
handlers.forEach((fn) => fn('ping'));

Pikatesti

Testatkaa, miten hyvin ymmärrätte void-tyypin.

Kertaus: void

Opitte, että void:

  • merkitsee funktioita, jotka palauttavat ei hyödyllistä arvoa.
  • eroaa undefined-tyypistä: void-tuloksia ei pidä käyttää.
  • hyväksyy callback-tyyppinä funktioita, jotka palauttavat minkä tahansa arvon, koska kutsujat ohittavat palautusarvon.
  • mahdollistaa metodien, kuten push-metodin, siistin käytön forEach-kutsussa.

Seuraavaksi kokoamme kaiken yhteen ja käsittelemme unknown-tyyppiä turvallisesti.

const tasks: Array<() => void> = [
  () => console.log('task 1'),
  () => console.log('task 2')
];
tasks.forEach((t) => t());
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 ”void-tyyppi funktioissa” ilmainen?

Kyllä – oppitunnin ”void-tyyppi funktioissa” 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 ”void-tyyppi funktioissa”?

Selvittäkää, miten void eroaa undefined-tyypistä funktion paluuarvon yhteydessä. 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 ”void-tyyppi funktioissa”-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. unknown- ja any-tyyppien ymmärtäminen
  2. never-tyyppi ja mahdottomat tilat
  3. void-tyyppi funktioissa
  4. unknown-tyypin tyyppiturvallinen käsittely
← Takaisin: TypeScript Academy