To jest nowy błąd, który pojawia się w kodzie maszynopisu.

Nie jestem w stanie zrozumieć logiki, która za tym stoi
Dokumentacja

/*When using the delete operator in strictNullChecks, 
the operand must now be any, unknown, never, or be optional 
(in that it contains undefined in the type). Otherwise, use of the delete operator is an error.*/

interface Thing {
  prop: string;
}

function f(x: Thing) {
  delete x.prop; // throws error = The operand of a 'delete' operator must be optional.
}
93
Akshay Vijay Jain 2 wrzesień 2020, 11:54

2 odpowiedzi

Najlepsza odpowiedź

Nie jestem w stanie zrozumieć logiki, która za tym stoi

Jak rozumiem, logika jest następująca:

Interfejs Thing jest kontraktem proszącym o posiadanie (niezerowego, niezdefiniowanego) string prop.

Jeśli usunie się nieruchomość, umowa nie będzie już realizowana.

Właściwie jestem zaskoczony, że nie powodowało to błędów we wcześniejszych wersjach TypeScript.

20
Pac0 11 grudzień 2020, 07:32

Logika tego polega na tym, że musisz zaimplementować swój interfejs z opcjonalną właściwością, taką jak ta:

interface Thing {
  prop?: string;
}

function f(x: Thing) {
  delete x.prop; 
}

Więc kontrakt interfejsu nie zostanie zerwany.

28
Tiago Vaccari 12 wrzesień 2020, 19:13