Świeżość i sprawdzanie nadmiarowych właściwości
Poznaj przyczyny, dla których nadmiarowe właściwości wywołują błędy w niektórych kontekstach.
Świeżość i sprawdzanie nadmiarowych właściwości to bezpłatna lekcja TypeScript Academy na CoddyKit. To lekcja 3 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej TypeScript Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs TypeScript Academy zawiera 4 lekcji w sumie.
Czym jest świeżość
Świeżość to pojęcie w TypeScript, zgodnie z którym literały obiektowe są uznawane za „świeże” w momencie utworzenia. Dla świeżych obiektów wykonywane jest ścisłe sprawdzanie nadmiarowych właściwości, które nie dotyczy obiektów rozszerzonych.
interface Point { x: number; y: number; }
const p: Point = { x: 1, y: 2, z: 3 }; // Error: 'z' not in PointSprawdzanie nadmiarowych właściwości w praktyce
Po bezpośrednim przypisaniu literału obiektowego do zmiennej z określonym typem lub przekazaniu go jako argumentu funkcji TypeScript zgłasza dodatkowe właściwości, których nie ma w typie docelowym.
function setPoint(p: { x: number; y: number }) {}
setPoint({ x: 1, y: 2, z: 3 }); // Error: 'z' excess propertyDlaczego istnieje sprawdzanie nadmiarowych właściwości
Wykrywa ono literówki i niezamierzone właściwości w obiektach konfiguracyjnych, które są częstym źródłem błędów w JavaScript.
interface Options { timeout: number; retry?: boolean; }
const opts: Options = { timeout: 3000, retrey: true }; // Error — typo!Utrata świeżości
Po przypisaniu literału obiektowego do zmiennej pośredniej nie jest on już „świeży”, dlatego sprawdzanie nadmiarowych właściwości nie dotyczy rozszerzonego typu.
const opts = { timeout: 3000, retry: true, extra: "surprise" };
const o: Options = opts; // No error — freshness lost on assignmentAsercje typów omijają świeżość
Użycie asercji typu as również omija sprawdzanie nadmiarowych właściwości, co może ukrywać błędy.
const o = { timeout: 3000, typo: true } as Options; // No errorSprawdzanie nadmiarowych właściwości z typami przecięcia
Typy przecięcia mogą czasami łagodzić sprawdzanie nadmiarowych właściwości, ponieważ dodatkowe właściwości mogą należeć do jednego z typów tworzących przecięcie.
type A = { x: number };
type B = { y: number };
const ab: A & B = { x: 1, y: 2 }; // OKReadonly a nadmiarowe właściwości
Sprawdzanie nadmiarowych właściwości dotyczy również typów obiektowych readonly — reguła odnosi się do struktury, a nie do możliwości modyfikacji.
interface Cfg { readonly host: string; }
const c: Cfg = { host: "localhost", port: 3000 }; // ErrorSygnatury indeksów a nadmiarowe właściwości
Dodanie sygnatury indeksu do typu pozwala na dowolne dodatkowe właściwości indeksowane kluczem typu string, skutecznie wyłączając sprawdzanie nadmiarowych właściwości dla tego typu.
interface Flexible { name: string; [key: string]: unknown; }
const f: Flexible = { name: "ts", extra: true }; // OKWłaściwości opcjonalne a świeżość
Właściwości opcjonalne nie łagodzą sprawdzania nadmiarowych właściwości. Właściwość, która w ogóle nie została wymieniona — nawet jako opcjonalna — nadal jest zgłaszana jako nadmiarowa.
interface Shape { color?: string; }
const s: Shape = { color: "red", size: 10 }; // Error: 'size' excessPraktyczne wzorce
Aby przekazywać dodatkowe właściwości konfiguracji przez interfejs z określonym typem bez błędów, należy użyć zmiennej pośredniej lub sygnatury indeksu w interfejsie.
// Option 1: intermediate variable (freshness lost)
const cfg = { timeout: 3000, debugMode: true };
const o: Options = cfg;
// Option 2: index signature in interfacePodsumowanie: świeżość
Świeżość dotyczy świeżych literałów obiektowych i umożliwia sprawdzanie nadmiarowych właściwości w momencie przypisania. Aby zezwolić na dodatkowe właściwości, należy przypisać obiekt do zmiennej pośredniej lub użyć sygnatury indeksu.
Szybkie sprawdzenie
Kiedy sprawdzanie nadmiarowych właściwości NIE ma zastosowania?
Czego się nauczono
Świeżość i sprawdzanie nadmiarowych właściwości chronią przed literówkami i niezamierzonymi właściwościami w literałach obiektowych. Należy rozumieć, kiedy świeżość zostaje utracona, aby unikać zaskakujących błędów typów lub ukrytych błędów.
Często zadawane pytania
Czy lekcja „Świeżość i sprawdzanie nadmiarowych właściwości” jest bezpłatna?
Tak — pełny tekst „Świeżość i sprawdzanie nadmiarowych właściwości” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu TypeScript Academy, przejdź na CoddyKit PRO. Kurs TypeScript Academy zawiera 4 lekcji w sumie.
Co nauczysz się w „Świeżość i sprawdzanie nadmiarowych właściwości”?
Poznaj przyczyny, dla których nadmiarowe właściwości wywołują błędy w niektórych kontekstach. Ćwiczysz TypeScript Academy z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.
Czy potrzebuję doświadczenia, aby zacząć TypeScript Academy?
Nie wymagamy żadnego doświadczenia. TypeScript Academy w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 3 z 4.
Ile czasu zajmuje lekcja „Świeżość i sprawdzanie nadmiarowych właściwości”?
Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.
Czy mogę pisać i uruchamiać kod w tej lekcji TypeScript Academy?
Tak. Każda lekcja TypeScript Academy zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.
Wszystkie lekcje w tym kursie
- Mechanizmy rozszerzania i zawężania typów
- Typowanie kontekstowe: wnioskowanie z kontekstu
- Świeżość i sprawdzanie nadmiarowych właściwości
- Asercje const i as const