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.

Jeszcze jedna instrukcja instalacji Arch Linux (i3)
Instalacja Arch Linux za każdym razem uczy mnie czegoś nowego na temat dysków, sieci, systemów operacyjnych. Polecam Ci ją jeśli chcesz mieć system skrojony pod Twoje wymagania.

Daniel Gustaw
• 15 min read
![Pulumi - Infrastruktura jako kod [ Digital Ocean ]](/_astro/f370e14e-6fd0-48ef-b689-02d89d85bfb7_ZzxruJ.png)
Pulumi - Infrastruktura jako kod [ Digital Ocean ]
Za pomocą Pulumi możesz zdefiniować swoją infrastrukturę IT w pliku opisanym za pomocą twojego ulubionego języka programowania. Ten artykuł pokazuje, jak to zrobić.

Daniel Gustaw
• 10 min read

Jak pobrać dane kontaktowe 20k adwokatów w godzinę
Poznaj technikę zrównoleglania scrapingu która może kilkukrotnie przyśpieszyć pobieranie danych.

Daniel Gustaw
• 17 min read