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.

Fastify Prisma REST backend
Szablon TypeScript dla REST API Fastify z autoryzacją JWT i Prisma.

Daniel Gustaw
• 7 min read

Od MLP do CNN. Sieci neuronowe do rozpoznawania cyfr MNIST
Budujemy i porównujemy cztery architektury sieci neuronowych w PyTorch, wizualizujemy wydajność, badamy złożoność w porównaniu do dokładności i pokazujemy, dlaczego CNN-y są najlepsze w klasyfikacji obrazów.

Daniel Gustaw
• 14 min read

Atak XSS przy użyciu stylu skryptu i obrazu
Dowiedz się, jak zainfekować stronę za pomocą ataku XSS przy użyciu tagów skryptu, stylu lub obrazu. Możesz zobaczyć, jak zastąpić zawartość strony swoją własną, nawet bez javascriptu.

Daniel Gustaw
• 4 min read