Classi TypeScript: chi può accedere a ogni membro

Classi TypeScript

Classi TypeScript: modificatori, readonly, abstract, implements | We.Inc

Campi, costruttori, parameter properties, public, protected, private e #private, readonly, abstract e implements. Verifica chi può raggiungere ogni membro in una matrice live.

Una classe TypeScript è una classe JavaScript con campi tipizzati e regole di accesso. I membri public sono raggiungibili ovunque, quelli protected dentro la classe e nelle sue sottoclassi, quelli private solo dentro la classe. Questi tre controlli esistono solo in fase di compilazione. Un campo #name è privato anche nel JavaScript in esecuzione, e readonly blocca le scritture dopo il costruttore.

Le parole chiave delle classi e cosa fanno

Scegli un modificatore e la matrice mostra cinque modi in cui il codice potrebbe raggiungere quel membro, con il risultato di tsc per ciascuno. La riga con le parentesi quadre è quella che sorprende: i modificatori di compilazione si possono aggirare con una chiave stringa, un campo # invece no.

Domande frequenti

Qual è la differenza tra private e #private?

private è un controllo di TypeScript. Sparisce dall'output, e obj["secret"] compila comunque e legge il valore. Un campo #secret è un campo privato JavaScript: nessuna chiave stringa lo raggiunge, e il codice fuori dalla classe non può leggerlo a runtime.

Cosa sono le parameter properties?

Una scorciatoia che dichiara e assegna un campo a partire da un parametro del costruttore. Scrivere constructor(private readonly id: string) {} crea un campo id private readonly senza bisogno di corpo. Il prefisso può essere public, protected, private o readonly.

implements cambia i tipi dentro la mia classe?

No. implements verifica solo che la classe finita rispetti l'interfaccia. I parametri dei metodi hanno comunque bisogno delle proprie annotazioni; ometterne una in strict mode genera un errore di any implicito, anche se l'interfaccia ne indica già il tipo.

Perché TypeScript dice che una proprietà non ha un inizializzatore?

strictPropertyInitialization, che strict attiva, richiede che ogni campo dichiarato sia impostato nella dichiarazione o nel costruttore. Dagli un valore, rendilo opzionale, oppure aggiungi ! dopo il nome se qualcos'altro lo imposta prima dell'uso.

Quando conviene una classe astratta invece di un'interfaccia?

Usa una classe astratta quando le sottoclassi devono condividere codice reale, come un metodo che chiama un hook astratto. Un'interfaccia non contiene codice e una classe può implementarne diverse, quindi è adatta a descrivere forme.

Campi, costruttori e parameter properties

Privacy in compilazione contro privacy a runtime

Classi e interfacce lavorano insieme

Pattern delle classi nella pratica

Parameter properties e un campo #

Il costruttore dichiara due campi nella sua lista di parametri. La cache è un campo #, quindi niente al di fuori della classe può leggerla o svuotarla.

Una base astratta con un override

describe è codice condiviso; area è l'hook che ogni forma deve fornire. Con noImplicitOverride attivo, la parola chiave override è obbligatoria su area in Circle.

implements verifica, non deduce

L'interfaccia garantisce che la classe abbia send con la forma giusta, ma il parametro ha comunque bisogno della propria annotazione di tipo.

Nessuna restrizione. Omettere il modificatore significa la stessa cosa.

Dentro i metodi di Account

Dentro un metodo di Savings

Dall'esterno, con il punto

Dall'esterno, con una chiave stringa

Dall'esterno, assegnando un nuovo valore

Aperto alla classe e alle sue sottoclassi. Una chiave stringa supera comunque il controllo, perché è solo una regola di tipo.

Dentro i metodi di Account

Dentro un metodo di Savings

Dall'esterno, con il punto

Dall'esterno, con una chiave stringa

Dall'esterno, assegnando un nuovo valore

Chiuso anche alle sottoclassi, ma solo durante il type checking. La forma con le parentesi quadre compila e il valore è leggibile a runtime.

Dentro i metodi di Account

Dentro un metodo di Savings

Dall'esterno, con il punto

Dall'esterno, con una chiave stringa

Dall'esterno, assegnando un nuovo valore

Un campo privato JavaScript. Nessuna chiave stringa lo nomina, quindi ogni accesso dall'esterno fallisce, e il motore impone la stessa regola a runtime.

Dentro i metodi di Account

Dentro un metodo di Savings

Dall'esterno, con il punto

Dall'esterno, con una chiave stringa

Dall'esterno, assegnando un nuovo valore

Chiunque può leggerlo; nessuno può assegnarlo dopo la costruzione, nemmeno i metodi della classe stessa.

Dentro i metodi di Account

Dentro un metodo di Savings

Dall'esterno, con il punto

Dall'esterno, con una chiave stringa

Dall'esterno, assegnando un nuovo valore

Matrice di accesso ai membri

Scegli un modificatore

Accesso a un membro {v}

Usato da

Codice

Risultato di tsc

Compila

Inizia gratis · Nessuna carta di credito richiesta

Correlati: Guide

Prodotto

Per chi è

Funzionalità

Risorse

Azienda

Mappa del sito