Javascript 错误背后的逻辑是什么?a';删除';运算符必须是可选的typescript 4.0
这是typescript代码中出现的新错误 我无法理解其背后的逻辑Javascript 错误背后的逻辑是什么?a';删除';运算符必须是可选的typescript 4.0,javascript,typescript,Javascript,Typescript,这是typescript代码中出现的新错误 我无法理解其背后的逻辑 我无法理解其背后的逻辑 我所理解的逻辑如下: InterfaceThing是一个要求将(非空、非未定义的)prop作为字符串的契约 如果删除了该属性,则该合同将不再执行 如果您希望它在删除时仍然有效,只需使用?:prop?:字符串将其声明为可选 事实上,我很惊讶这并没有在早期版本的TypeScript中导致错误。这背后的逻辑是,您需要使用如下可选属性实现接口: interface Thing { prop?: string
我无法理解其背后的逻辑 我所理解的逻辑如下: Interface
Thing
是一个要求将(非空、非未定义的)prop
作为字符串的契约
如果删除了该属性,则该合同将不再执行
如果您希望它在删除时仍然有效,只需使用?
:prop?:字符串将其声明为可选
事实上,我很惊讶这并没有在早期版本的TypeScript中导致错误。这背后的逻辑是,您需要使用如下可选属性实现接口:
interface Thing {
prop?: string;
}
function f(x: Thing) {
delete x.prop;
}
因此,接口的契约不会被打破。如果您希望它存在,请使用另一个实现:
interface Thing {
prop: string;
}
interface PropoptionalThing {
prop?: string;
}
function f(x: Thing): PropoptionalThing {
let tmp: PropoptionalThing = x;
delete tmp.prop;
return tmp;
}
你的问题包括答案在strictNullChecks中使用delete运算符时,操作数现在必须为any、unknown、never或可选
如果使用React并希望将道具传递给组件,则这是误报,但不希望将所有的道具传递给HTMLDOM元素,因为它们无效,并且您正在使用扩展运算符来允许使用者传递所有本机HTML属性。然后复制道具并删除不必要的道具。
interface Thing {
prop: string;
}
interface PropoptionalThing {
prop?: string;
}
function f(x: Thing): PropoptionalThing {
let tmp: PropoptionalThing = x;
delete tmp.prop;
return tmp;
}