Biorąc pod uwagę następujący podpis:
export interface INotificationService {
error(message: string, title?: string, autoHideAfter?: number);
}
Jak mogę wywołać funkcję error()
nie określającą title
parametru, ale ustawienie autoHideAfter
do powiedzenia 1000
?
typescript
g.pickardou
źródło
źródło
?
Dodaje się w funkcji definicji , ale pytanie jest o faktycznie wywołanie funkcji.undefined
aby uzyskać takie samo zachowanie, jak całkowite pominięcie argumentu. Po prostu „wszystko, co nie jest prawdą” nie zadziała, ponieważ TypeScript faktycznie porównuje, zvoid 0
którym jest bezpieczniejszym sposobem pisaniaundefined
. )Niestety nie ma czegoś takiego w TypeScript (więcej szczegółów tutaj: https://github.com/Microsoft/TypeScript/issues/467 )
Aby obejść ten problem, możesz zmienić swoje parametry na interfejs:
źródło
możesz użyć zmiennej opcjonalnej przez
?
lub jeśli masz wiele zmiennych opcjonalnych przez...
, na przykład:W powyższym:
name
jest wymaganecountry
jest wymagany i ma wartość domyślnąaddress
jest opcjonalnehobbies
to tablica opcjonalnych parametrówźródło
Innym podejściem jest:
Więc jeśli chcesz pominąć parametr title, po prostu wyślij dane w ten sposób:
Wolę te opcje, ponieważ pozwala mi dodać więcej parametrów bez konieczności wysyłania innych.
źródło
title
?Jest to prawie to samo co odpowiedź @Brocco, ale z lekkim zwrotem: przekazuj tylko opcjonalne parametry w obiekcie. (A także uczyń obiekt params opcjonalnym).
Ostatecznie przypomina trochę kwargów ** Pythona, ale nie do końca.
źródło
Możesz określić wiele podpisów metod w interfejsie, a następnie mieć przeciążenia wielu metod w metodzie klasy:
Teraz wszystkie będą działać:
... a
error
metodaINotificationService
będzie miała następujące opcje:Plac zabaw
źródło
Możesz utworzyć metodę pomocniczą, która akceptuje parametry jednego obiektu na podstawie argumentów błędów
źródło
Możesz spróbować ustawić tytuł na null.
To zadziałało dla mnie.
źródło
Możesz to zrobić bez interfejsu.
użyj
?
operatora jako parametru opcjonalnego.źródło
message
iautoHideAfter