Magiczny_Magik
- 11wpisy
- 31komentarzy
Zostań Patronem Hejto i tylko dla Patronów
- Włączona możliwość zarabiania na swoich treściach
- Całkowity brak reklam na każdym urządzeniu
- Oznaczenie w postaci rogala , który świadczy o Twoim wsparciu
- Wcześniejszy dostęp, do wybranych funkcji na Hejto
czekam na więcej
Zaloguj się aby komentować
#typescript
Więcej?
Fajne rzeczy
@Magiczny_Magik wołaj lub stwórz własny tak do obserwowania
@Magiczny_Magik czyta, czyta. Wincyj!
Zaloguj się aby komentować
Czasami zdarza się, że jakiś skrypt jest dodawany przez tag <script>. Na domiar złego, ten skrypt tworzy obiekt globalny, którego nasz kompilator nie jest w stanie znaleźć. Co możemy w tym przypadku zrobić?
Sprawa jest dość prosta - wystarczy użyć opcji Declaration Merging, a konkretnie Global Augmentation. Za pomocą słów kluczowych `declare global` możemy wpływać na globalne interfejsy i dodawać do nich nowe pola.
Podobny mechanizm działa także dla modułów, tzn. możemy "naprawiać" deklaracje typów zewnętrznych bibliotek. W takim scenariuszu sprawdzi się Module Augmentation.
Więcej informacji znajdziecie tutaj.
#typescript
Zaloguj się aby komentować
Powyższy opis nie jest najlepszej jakości, ale trudno wytłumaczyć coś, co najlepiej prezentuje się w praktyce. Wyobraźmy sobie, że definiujemy drzewo ścieżek w naszej aplikacji. Moglibyśmy je zobrazować poprzez: type Routes = Record<string, { path: string; children?: Routes }>. Niestety, taka definicja umożliwia odwoływanie się do nieistniejących ścieżek.
Problem można obejść stosując casting przez operator as, ale wtedy będzie można dodać do naszego drzewa wpisy, które nie będą spełniać warunków postawionych przez nasz typ.
Najlepszym wyjściem jest użycie operatora satisfies, który prawidłowo zawęzi nasz typ i nie pozwoli na odwoływanie się do nieistniejących ścieżek, a także będzie trzymał pieczę nad tym, aby każdy wpis spełniał postawione przez typ warunki.
TypeScript Playground
#typescript
@Magiczny_Magik eh tyle razy robiłem podejście do tego typescriptu i łeb mi puchnie
Zaloguj się aby komentować
Niestety, TypeScript nie jest w stanie wykryć, że warunek postawiony przez nas w czasie filtrowania spowoduje zmianę typu tablicy. Możemy mu w tym pomóc stosując Type Guard i informując kompilator, że jeżeli funkcja filtrująca zwróci wartość true to zwrócona wartość będzie danego typu.
Type Guard używa następującej składni: (item): item is number => typeof item === 'number'
TypeScript Playground
#typescript
@Magiczny_Magik fajne, dzięki
Zaloguj się aby komentować
Jeżeli chcemy zadeklarować nową metodę na naszej klasie bez jej modyfikacji to możemy zdefiniować interfejs o tej samej nazwie i umieścić w nim sygnaturę metody. TypeScript połączy sygnatury i voila! Metody statyczne możemy również dodawać w podobny sposób, ale w tym przypadku należy użyć namespace.
Po co? Teoretycznie pozwala to na użycie wzorca Extension Method obecnego w np. Kotlinie czy C#.
TypeScript Playground
#typescript
Nie lepiej rozszerzyć klasę (*przez dziedziczenie)? Jest to popularny "zabieg" i obcy czytający kod szybciej się połapie.
@szczekoscisk Tutaj są wspomniane przypadki, gdy się to przydaje w C#: https://learn.microsoft.com/en-us/dotnet/csharp/programming-guide/classes-and-structs/extension-methods#common-usage-patterns
@Magiczny_Magik Zaskakuje mnie, że nadal mnie zaskakuje ten język
Zaloguj się aby komentować