TypeScript 错误“'删除'运算符的操作数必须是可选的”背后的逻辑是什么?

2022-08-30 04:17:31

这是类型脚本代码中出现的新错误。

我无法意识到它
背后的逻辑 文档

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

答案 1

我无法意识到它背后的逻辑

我所理解的逻辑如下:

接口是一个合约,要求将 (非空值,非未定义) 作为 .Thingpropstring

如果删除该属性,则不再实现该协定。

如果您希望它在删除时仍然有效,只需使用以下命令将其声明为可选:?prop?: string

我真的很惊讶,这在早期版本的TypeScript中没有引起错误。


答案 2

这背后的逻辑是,您需要使用可选属性实现接口,如下所示:

interface Thing {
  prop?: string;
}
// OR
interface Thing {
  prop: string | undefined;
}

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

因此,接口的契约不会被破坏。