Te modyfikatory właściwości kontrolują, czy właściwość jest wymagana i czy można ją przypisać ponownie.
Opcjonalny (?)
ts
{
: ;
?: ;
}
: = { : };
: = { : , : };
() {
u..;
u.?.;
}
Te modyfikatory właściwości kontrolują, czy właściwość jest wymagana i czy można ją przypisać ponownie.
?) {
: ;
?: ;
}
: = { : };
: = { : , : };
() {
u..;
u.?.;
}
Właściwość opcjonalna ma typ T | undefined, więc kompilator wymusza obsługę przypadku nieobecności — zapobiegając błędom «cannot read property of undefined».
interface Point { readonly x: number; readonly y: number; }
const p: Point = { x: 1, y: 2 };
p.x = 5; // ❌ Error: cannot assign to readonly property
// arrays too
const nums: readonly number[] = [1, 2, 3];
nums.push(4); // ❌ push doesn't exist on readonly array
readonly istnieje tylko w czasie kompilacji (bez wymuszania w czasie wykonania), ale dokumentuje i egzekwuje niezmienność w systemie typów, przechwytując przypadkowe mutacje.
interface Config { readonly id: string; tags?: readonly string[]; }
type Frozen = Readonly<User>; // utility type makes ALL props readonly
? modeluje naprawdę opcjonalne dane i wymusza bezpieczeństwo wartości null; readonly wyraża i egzekwuje niezmienność (świetne dla config, props i zapobiegania przypadkowym mutacjom stanu).
Oba wymuszają sprawdzanie poprawności w kompilatorze.