Przeciążone sygnatury w TypeScript
W TypeScript możemy określić funkcję, która może być wywoływana na różne sposoby, pisząc sygnatury przeciążenia. Można to wykorzystać do definiowania funkcji, których typ zwracany zależy od wartości argumentów.

Daniel Gustaw
• 2 min read

Kiedy masz funkcję, która zwraca różne typy w zależności od wartości parametrów, overload signatures
mogą być dokładnie tym, czego potrzebujesz.
Pozwól, że przedstawię kontekst.
Mamy super prostą funkcję, która oblicza objętość hipersześcianu:
interface HyperCube {
size: number
dimension: number
}
export function volume(cube: HyperCube): number {
return Math.pow(cube.size, cube.dimension);
}
Ale ponieważ nasze wolumeny są naprawdę ogromne, musimy je wyświetlać w notacji snake case. Na przykład: 1_000_000_000
zamiast 1000000000
.
Możemy dodać funkcję do formatowania.
export function formatNumber(num: number): string {
return num.toString().replace(/(\d)(?=(\d{3})+(?!\d))/g, '$1_')
}
ale nie chcemy zawsze pisać tej funkcji formatNumber
podczas konwersji do string. Zamiast tego chcielibyśmy dodać drugi parametr do funkcji volume
, aby zdecydować, czy zwracamy string, czy liczbę.
export function volume(cube: HyperCube, asString: boolean = false): string | number {
const volume = Math.pow(cube.size, cube.dimension);
return asString ? formatNumber(volume) : volume;
}
Niestety, obecnie korzystając z funkcji volume
, nie wiemy, czy otrzymamy string
czy number
. Nie chcemy korzystać z .toString
ani parseInt
w żadnym przypadku.
Na szczęście istnieje koncepcja zwana sygnaturami przeciążenia. Umożliwia ona wybór typu zwracanego w zależności od wartości parametrów.
W naszym przypadku chcemy, aby number
był, gdy asString
jest false, w przeciwnym razie potrzebujemy zwrócić string
. Aby zastosować sygnaturę przeciążenia, możemy użyć następującej składni:
export function volume(cube: HyperCube, asString: false): number
export function volume(cube: HyperCube, asString: true): string
export function volume(cube: HyperCube, asString: boolean = false): string | number {
const volume = Math.pow(cube.size, cube.dimension);
return asString ? formatNumber(volume) : volume;
}
teraz nasz typ zwracany jest poprawny i zależy od wartości asString
.
Źródła:
Typ zwracany funkcji TypeScript w oparciu o parametr wejściowy
Other articles
You can find interesting also.

Implementacja QuickSort w Rust, Typescript i Go
Opanuj QuickSort dzięki naszemu szczegółowemu przewodnikowi oraz przykładom implementacji w trzech popularnych językach programowania, aby szybko i efektywnie sortować duże zbiory danych.

Daniel Gustaw
• 5 min read

CodinGame: Czas pochodnej - Część 1, Rekursja (Typescript)
Rozwiązanie ćwiczenia CodinGame. Prosty przykład rekurencji z typescriptem. Reprezentacja formuły inspirowana lispem.

Daniel Gustaw
• 17 min read

Scraping najbardziej popularnych kont na twitterze
Dzięki obserwacji wpisów z twittera możemy śledzić różne trendy. W tym wpisie pokażę jak pobrać dane o kontach w tym serwisie i wybrać te, które mają największy współczynnik wpływu.

Daniel Gustaw
• 8 min read