Esses modificadores de propriedade controlam se uma propriedade é obrigatória e se pode ser reatribuída.
Opcional (?)
ts
{
: ;
?: ;
}
: = { : };
: = { : , : };
() {
u..;
u.?.;
}
Esses modificadores de propriedade controlam se uma propriedade é obrigatória e se pode ser reatribuída.
?) {
: ;
?: ;
}
: = { : };
: = { : , : };
() {
u..;
u.?.;
}
Uma propriedade opcional tem tipo T | undefined, então o compilador força você a lidar com o caso ausente — prevenindo erros «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 é apenas em tempo de compilação (sem imposição em tempo de execução), mas documenta e impõe imutabilidade no sistema de tipos, capturando mutações acidentais.
interface Config { readonly id: string; tags?: readonly string[]; }
type Frozen = Readonly<User>; // utility type makes ALL props readonly
? modela dados genuinamente opcionais e força segurança null; readonly expressa e impõe imutabilidade (ótimo para config, props e prevenir mutação de estado acidental).
Ambos empurram a verificação de correção para o compilador.