Αυτοί οι τροποποιητές ιδιοτήτων ελέγχουν εάν μια ιδιότητα είναι απαιτούμενη και εάν μπορεί να εκχωρηθεί ξανά.
Optional (?)
ts
{
: ;
?: ;
}
: = { : };
: = { : , : };
() {
u..;
u.?.;
}
Αυτοί οι τροποποιητές ιδιοτήτων ελέγχουν εάν μια ιδιότητα είναι απαιτούμενη και εάν μπορεί να εκχωρηθεί ξανά.
?) {
: ;
?: ;
}
: = { : };
: = { : , : };
() {
u..;
u.?.;
}
Μια προαιρετική ιδιότητα έχει τύπο T | undefined, επομένως ο μεταγλωττιστής σας αναγκάζει να χειρίζεστε την περίπτωση απουσίας — αποτρέποντας σφάλματα "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 ισχύει μόνο κατά τη σύνταξη (χωρίς επιβολή κατά την εκτέλεση), αλλά τεκμηριώνει και επιβάλλει αναλλοιωτότητα στο σύστημα τύπων, συλλαμβάνοντας τυχαίες μεταλλάξεις.
interface Config { readonly id: string; tags?: readonly string[]; }
type Frozen = Readonly<User>; // utility type makes ALL props readonly
? μοντελοποιεί πραγματικά προαιρετικά δεδομένα και επιβάλλει ασφάλεια null. readonly εκφράζει και επιβάλλει αναλλοιωτότητα (ιδανικό για ρυθμίσεις, props και για την αποφυγή τυχαίων state mutations).
Και τα δύο ωθούν τον έλεγχο ορθότητας στον μεταγλωττιστή.