1. ホーム
  2. javascript

[解決済み] TypeScriptのエラー「The operand of a 'delete' operator must be optional」の背後にある論理は何ですか?

2022-03-10 06:50:04

質問

タイプスクリプトのコードで新たに発生したエラーです。

このロジックを理解することができません。
ドキュメント

/*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.
}

解決方法は?

<ブロッククオート

その背後にあるロジックを理解することができません。

私が理解しているロジックは以下の通りです。

インターフェース Thing は、(非NULL、非定義)であることを求める契約です。 prop として string .

もし、このプロパティを削除したら、そのコントラクトはもう実装されない。

削除しても有効にしたい場合は、オプションとして ? : prop?: string

実は、以前のバージョンのTypeScriptでは、これがエラーにならなかったことに驚いているんです。