Typ void w funkcjach
Dowiedz się, czym void różni się od undefined w pozycjach zwracanych przez funkcje
Typ void w funkcjach to bezpłatna lekcja TypeScript Academy na CoddyKit. To lekcja 3 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej TypeScript Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs TypeScript Academy zawiera 4 lekcji w sumie.
Typ zwracany void
void opisuje funkcję, która nie zwraca żadnej użytecznej wartości. Funkcja nadal kończy działanie — po prostu nie generuje wyniku, który należy wykorzystywać. Jest to typ funkcji wywoływanych ze względu na ich efekty uboczne.
function log(message: string): void {
console.log(message);
}
log('Hello void');Wnioskowanie typu void
Jeśli funkcja nie zawiera instrukcji return (lub zawiera tylko pustą instrukcję return;), TypeScript automatycznie wnioskuje typ void. Zwykle nie trzeba zapisywać go jawnie, choć dokumentuje to intencję.
function greet(name: string) {
console.log('Hi ' + name);
// no return -> inferred void
}
greet('Ada');void a undefined
Te typy są powiązane, ale nie są takie same. Funkcja typu void może faktycznie zwrócić undefined, ale nie należy polegać na jej wartości zwracanej. Funkcja zadeklarowana jako zwracająca undefined musi jawnie ją zwrócić.
function a(): void { /* returns nothing useful */ }
function b(): undefined { return undefined; }
console.log(a(), b());Nie należy używać wyniku typu void
Wartością zwracaną w czasie działania programu przez wywołanie funkcji typu void jest undefined, ale system typów zniechęca do jej używania. void należy traktować jako polecenie „zignoruj tę wartość zwracaną”.
function save(): void {
console.log('saved');
}
const result = save(); // result has type void
console.log(result); // undefined at runtimevoid w typach callbacków
Istnieje subtelna, ale ważna reguła: callback zadeklarowany jako zwracający void może być obsłużony przez funkcję zwracającą dowolną wartość. Dodatkowa wartość zwracana jest po prostu ignorowana.
type Handler = () => void;
const h: Handler = () => 42; // returns number, still fine
h();
console.log('Returned value is ignored by callers');Dlaczego istnieje ta reguła
Ta elastyczność pozwala przekazywać funkcje takie jak arr.push (które zwracają liczbę) jako callbacki typu void. Wywołujący obiecał, że nie użyje wartości zwracanej, więc dowolna wartość zwrócona przez funkcję jest nieszkodliwa.
const items: number[] = [];
const nums = [1, 2, 3];
nums.forEach((n) => items.push(n)); // push returns number, ok
console.log(items);Kontekstowy void w metodach tablic
forEach oczekuje callbacka zwracającego void. Dlatego można napisać jednolinijkową funkcję strzałkową, która przy okazji zwraca wartość, bez powodowania błędu — kontekstowy typ void ją absorbuje.
const result: string[] = [];
['a', 'b'].forEach((x) => result.push(x.toUpperCase()));
console.log(result);Częste nieporozumienie
Reguła dotycząca callbacków typu void odnosi się do typu callbacka, a nie do funkcji, której własny zadeklarowany typ zwracany to void. Funkcja dosłownie zadeklarowana jako (): void nadal nie może zawierać return value; z wartością inną niż undefined.
function f(): void {
return; // ok
// return 5; // Error: 5 not assignable to void
}
f();
console.log('declared void cannot return a value');Parametry typu void są nietypowe
Choć zdarza się to rzadko, void może wystąpić jako typ parametru w zaawansowanych typach generycznych. W codziennym kodzie niemal zawsze pojawia się jako typ zwracany, sygnalizując „brak istotnego wyniku”.
type Listener = (event: string) => void;
const onClick: Listener = (e) => console.log('Event:', e);
onClick('click');void z obietnicami
Funkcje asynchroniczne często zwracają Promise<void>, gdy wykonują pewne działania, ale kończą się bez wartości. Ten wzorzec jest asynchronicznym odpowiednikiem synchronicznego void.
async function sync(): Promise<void> {
console.log('syncing...');
// resolves with no value
}
sync().then(() => console.log('done'));Świadome wybieranie void
Warto jawnie zadeklarować void, gdy funkcja istnieje ze względu na efekty uboczne i wywołujący nie może polegać na jej wartości zwracanej. Wyjaśnia to intencję i pozwala korzystać z elastycznej reguły dotyczącej callbacków.
function notify(msg: string): void {
console.log('NOTIFY:', msg);
}
const handlers: Array<(m: string) => void> = [notify];
handlers.forEach((fn) => fn('ping'));Szybkie sprawdzenie
Sprawdź zrozumienie typu void.
Podsumowanie: void
W tym rozdziale poznano, że void:
- Oznacza funkcje, które zwracają brak użytecznej wartości.
- Różni się od
undefined: nie należy używać wyników typu void. - Jako typ callbacka akceptuje funkcje zwracające dowolną wartość (ignorowaną przez wywołującego).
- Umożliwia wygodne używanie metod takich jak
pushwewnątrzforEach.
Następnie połączymy wszystkie elementy, aby bezpiecznie obsługiwać unknown.
const tasks: Array<() => void> = [
() => console.log('task 1'),
() => console.log('task 2')
];
tasks.forEach((t) => t());Często zadawane pytania
Czy lekcja „Typ void w funkcjach” jest bezpłatna?
Tak — pełny tekst „Typ void w funkcjach” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu TypeScript Academy, przejdź na CoddyKit PRO. Kurs TypeScript Academy zawiera 4 lekcji w sumie.
Co nauczysz się w „Typ void w funkcjach”?
Dowiedz się, czym void różni się od undefined w pozycjach zwracanych przez funkcje Ćwiczysz TypeScript Academy z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.
Czy potrzebuję doświadczenia, aby zacząć TypeScript Academy?
Nie wymagamy żadnego doświadczenia. TypeScript Academy w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 3 z 4.
Ile czasu zajmuje lekcja „Typ void w funkcjach”?
Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.
Czy mogę pisać i uruchamiać kod w tej lekcji TypeScript Academy?
Tak. Każda lekcja TypeScript Academy zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.
Wszystkie lekcje w tym kursie
- Zrozumienie unknown i any
- Typ never i stany niemożliwe
- Typ void w funkcjach
- Bezpieczna typowo obsługa unknown