Typescript - interface

0

Czym są interface w typescript i dlaczego chciałbym ich używać programując w Angularze? Ktoś mógłby szczegółowo ale i rzeczowo i praktycznie wytłumaczyć ideę intrefejsów?

5

Dzięki interfejsom w Typescripcie możesz sobie zdefiniować "typ" zmiennej. Można to w jakimś stopniu odnieść do klasy - definiujesz sobie interfejs, który zawiera w sobie określone atrybuty, więc gdy użyjesz go do deklaracji zmiennej to wiesz, że zawiera ona te same atrybuty, co użyty do jej deklaracji interfejs. To jest właśnie siła Typescripta - nie musisz pamiętać co w jakiej zmiennej siedzi - robi to za Ciebie interfejs.

EDIT: Jestem praktykiem, który uczył się Typescripta w trakcie developmentu, więc staram się wyjaśnić od strony praktycznej. Od teorii pewnie jeszcze ktoś tu się pojawi :D

3

Dodam od siebie, że interfejs pilnuje również typu danego atrybutu. Niejednokrotnie miałem sytuację gdzie zewnętrzny serwis zwracał np. string zamiast number. Musiałem zatem zaktualizować interfejs, a co za tym idzie kompilator wskazał mi miejsca w których wykonywałem na tym operacje arytmetyczne. Gdybym korzystał bezpośrednio z modelu, to znalezienie takich problemów mogło by być bardziej uciążliwe.

0

W takim razie jaki byłby usecase na wykorzystanie interface (@czubeka2 już zaczął o tym mówić) a jaki na model? Czy to jest kwiestia już bardziej deva, co mu wygodniej, czy są jakieś restrykcyjne zasady kiedy należy użyć interface a kiedy modelu?

1

Model powinien opisywać dane pochodzące z zewnętrznego systemu, natomiast interfejs wpisuje się w wewnętrzną wymianę danych wewnątrz aplikacji. Nie ma konieczności walidowania interfejsu, ponieważ zakładamy że jest on poprawny. Model z kolei należy zwalidować przed wykorzystaniem go w aplikacji.

Use case:
Dane pochodzą z naszego backendu i są opisywane przez model (lub nawet schema), nasza aplikacja konweruje je na interfejs wykorzystywany w serwisach/komponentach. W jakim celu natomiast jest dokonywana konwersja na intrfejs? Nasz backend jest wykorzystywany przez inne aplikacje, więc z powodów kompatybilności pola z wartościami numerycznymi są przechowywane jako string. My w aplikacji będziemy dokonywać operacji arytmetycznych na tych polach, więc chcemy aby ta wartość była typu number. Podczas konwersji do intrfejsu robimy operacje typu parseInt/parseFloat. Pozostałe segmenty aplikacji korzystają już z intrfejsu, który posiada przekonwertowane wartości.

1 użytkowników online, w tym zalogowanych: 0, gości: 1