使用 Javascript 从对象中删除键时,“删除”运算符的操作数必须是 optional.ts
Posted
技术标签:
【中文标题】使用 Javascript 从对象中删除键时,“删除”运算符的操作数必须是 optional.ts【英文标题】:The operand of a 'delete' operator must be optional.ts when deleting a key from object with Javascript 【发布时间】:2022-01-23 02:48:53 【问题描述】:我有一个对象,我在我的 React 应用程序的多个地方使用它:
export default
'One': Key: Foo.Bar, Color: '#eeeeaa' ,
'Two': Key: Foo.Bar, Color: '#aaeeee' ,
'Three': Key: Foo.Bar, Color: '#ffaaaa',
;
在一个特定的组件中,我需要这个对象,但没有键“三”。
当我尝试时:
import MyObjects from './';
const newObject = delete MyObjects.Three;
我明白了:
“删除”运算符的操作数必须是可选的.ts
如何解决这个问题或有更清洁的方法?
更新:
当我尝试时:
const myObject2 = MyObjects;
const Three, ...testData = myObject;
console.log(testData);
然后我得到 Eslint 错误:
'Three' 被赋值但从不 used.eslint@typescript-eslint/no-unused-vars
【问题讨论】:
不要改变另一个模块的导出。该错误使您避免犯错误,这会在其他组件中造成很多麻烦-很好!相反,创建一个不包含该键Three
的 新对象 - 请参阅 ***.com/questions/208105/…
@Bergi 然后我得到'Three' is assigned a value but never used.eslint@typescript-eslint/no-unused-vars
。我更新了我的问题。你有什么想法吗?
重新更新:忽略该行中的规则或使用该规则通常允许的const Three: _, ...testData = myObject;
。另请参阅 ***.com/q/62839717/1048572 和 ***.com/questions/56151661/… 等等
不确定这是否有帮助.. const newObj = 'one': [MyObjects.One], 'two': [MyObjects.Two] 或 Object.keys(MyObjects).forEach (key => if (key !== 'Three') obj[key] = MyObjects[key]; )
【参考方案1】:
阅读:
“删除”运算符的操作数必须是可选的。
您需要使用接口以及可选键。您可以创建一个具有特定接口类型的变量,而不是直接导出。
?
用于表示可选属性。它们可以被删除(如您的错误所示)。
export interface Key
Key : string,
Color : string
export interface Colors
One : Key,
Two : Key,
Three? : Key
const defaultColors : Colors =
'One': Key: Foo.Bar, Color: '#eeeeaa' ,
'Two': Key: Foo.Bar, Color: '#aaeeee' ,
'Three': Key: Foo.Bar, Color: '#ffaaaa',
;
export default defaultColors;
另一种方法是创建一个只有两种颜色的界面,然后创建一个扩展第一种颜色的第二个界面(以及添加属性Three
)。
【讨论】:
这将破坏 OP 的应用程序以上是关于使用 Javascript 从对象中删除键时,“删除”运算符的操作数必须是 optional.ts的主要内容,如果未能解决你的问题,请参考以下文章
JavaScript 从字符串中删除零宽度空间(unicode 8203)
用regedit删除注册表某键,报错,说不能删除,删除键时出错,怎么回事