Klasy w TypeScript: kto ma dostęp do każdego członka

Klasy w TypeScript

Klasy w TypeScript: modyfikatory, readonly, abstract, implements | We.Inc

Pola, konstruktory, parameter properties, public, protected, private i #private, readonly, abstract i implements. Sprawdź w macierzy na żywo, kto ma dostęp do każdego członka klasy.

Klasa w TypeScript to klasa JavaScript z typowanymi polami i regułami dostępu. Członkowie public są dostępni wszędzie, protected wewnątrz klasy i jej podklas, a private tylko wewnątrz klasy. Te trzy kontrole istnieją wyłącznie w czasie kompilacji. Pole #name jest prywatne także w uruchomionym JavaScripcie, a readonly blokuje zapis po zakończeniu konstruktora.

Słowa kluczowe klas i ich działanie

Wybierz modyfikator, a macierz pokaże pięć sposobów, w jakie kod może sięgnąć do tego członka, wraz z wynikiem tsc dla każdego z nich. Wiersz z nawiasami kwadratowymi najbardziej zaskakuje: modyfikatory sprawdzane w czasie kompilacji można obejść kluczem tekstowym, a pola z # nie.

Najczęściej zadawane pytania

Czym różni się private od #private?

private to kontrola TypeScriptu. Znika z wyniku kompilacji, a obj["secret"] nadal się kompiluje i odczytuje wartość. Pole #secret to prywatne pole JavaScriptu: żaden klucz tekstowy do niego nie sięga, a kod spoza klasy nie odczyta go w czasie działania.

Czym są parameter properties?

To skrót, który deklaruje i przypisuje pole z parametru konstruktora. Zapis constructor(private readonly id: string) {} tworzy prywatne pole id tylko do odczytu bez potrzeby pisania ciała. Prefiksem może być public, protected, private lub readonly.

Czy implements zmienia typy wewnątrz mojej klasy?

Nie. implements sprawdza tylko, czy gotowa klasa pasuje do interfejsu. Parametry metod nadal potrzebują własnych adnotacji; pominięcie jednej w trybie strict daje błąd niejawnego any, choć interfejs już podaje jej typ.

Dlaczego TypeScript twierdzi, że właściwość nie ma inicjalizatora?

strictPropertyInitialization, włączane przez strict, wymaga, aby każde zadeklarowane pole było ustawione w deklaracji lub konstruktorze. Nadaj mu wartość, zrób je opcjonalnym albo dodaj ! po nazwie, jeśli ustawia je coś innego przed użyciem.

Kiedy użyć klasy abstrakcyjnej zamiast interfejsu?

Użyj klasy abstrakcyjnej, gdy podklasy mają współdzielić prawdziwy kod, na przykład metodę wywołującą abstrakcyjny hook. Interfejs nie zawiera kodu, a klasa może implementować kilka interfejsów, więc nadaje się do opisywania kształtów.

Pola, konstruktory i parameter properties

Prywatność w czasie kompilacji a prywatność w czasie działania

Klasy i interfejsy działają razem

Wzorce klas w praktyce

Parameter properties i pole z #

Konstruktor deklaruje dwa pola na liście parametrów. Pamięć podręczna to pole z #, więc nic spoza klasy nie może jej odczytać ani wyczyścić.

Abstrakcyjna klasa bazowa z override

describe to współdzielony kod; area to hook, który musi dostarczyć każdy kształt. Przy włączonym noImplicitOverride słowo override jest wymagane przy area w Circle.

implements sprawdza, nie wnioskuje

Interfejs pilnuje, aby klasa miała send o właściwym kształcie, ale parametr nadal potrzebuje własnej adnotacji typu.

Bez ograniczeń. Pominięcie modyfikatora oznacza to samo.

W metodach samej klasy Account

W metodzie klasy Savings

Na zewnątrz, przez kropkę

Na zewnątrz, przez klucz tekstowy

Na zewnątrz, przypisując nową wartość

Dostępny dla klasy i jej podklas. Klucz tekstowy nadal omija kontrolę, bo to tylko reguła typów.

W metodach samej klasy Account

W metodzie klasy Savings

Na zewnątrz, przez kropkę

Na zewnątrz, przez klucz tekstowy

Na zewnątrz, przypisując nową wartość

Zamknięty nawet dla podklas, ale tylko podczas sprawdzania typów. Forma z nawiasami się kompiluje, a wartość da się odczytać w czasie działania.

W metodach samej klasy Account

W metodzie klasy Savings

Na zewnątrz, przez kropkę

Na zewnątrz, przez klucz tekstowy

Na zewnątrz, przypisując nową wartość

Prywatne pole JavaScriptu. Żaden klucz tekstowy go nie nazywa, więc każda droga z zewnątrz zawodzi, a silnik wymusza tę samą regułę w czasie działania.

W metodach samej klasy Account

W metodzie klasy Savings

Na zewnątrz, przez kropkę

Na zewnątrz, przez klucz tekstowy

Na zewnątrz, przypisując nową wartość

Każdy może go odczytać; nikt nie może go przypisać po utworzeniu obiektu, nawet metody samej klasy.

W metodach samej klasy Account

W metodzie klasy Savings

Na zewnątrz, przez kropkę

Na zewnątrz, przez klucz tekstowy

Na zewnątrz, przypisując nową wartość

Macierz dostępu do członków

Wybierz modyfikator

Dostęp do członka {v}

Użyty z

Kod

Wynik tsc

Kompiluje się

Zacznij za darmo · Bez karty kredytowej

Powiązane: Poradniki

Produkt

Dla kogo

Funkcje

Zasoby

Firma

Mapa strony