TypeScript · Avançado · Inglês · Técnico
define semantics
Comportamento ligado à opção useDefineForClassFields, em que campos de classe são emitidos com [[Define]] do ECMAScript, e não como atribuições no construtor. É o padrão com target ES2022 ou superior.
Onde usar
Causa bugs sutis ao migrar: um campo redeclarado na subclasse sem inicializador passa a valer undefined e sobrescreve o valor que a base atribuiu.
Em código
class Base {
x: number = 1;
}
class Filho extends Base {
declare x: number; // só tipo, sem emitir
// x!: number; // define: x = undefined
}
const v = new Filho().x; // 1Exemplos
The subclass field reset to undefined because of define semantics.
O campo da subclasse virou undefined por causa do define semantics.
Use declare on the field to keep the base value.
Use declare no campo para manter o valor da base.
Cuidado
Declarar um campo só para tipar deixa de ser inofensivo; use declare nome: tipo quando o valor vem da classe base.
Sinônimos
useDefineForClassFields