[英]How to avoid triggering eslint's for..in when using Typescript
我目前使用 TypeScript 推薦的方法來迭代對象的鍵。像這樣:
let key: keyof ExampleObject;
for (key in exampleObject) {
// do some work with exampleObject[key];
}
在我當前的項目中,Eslint 抱怨使用for..in
構造如下:
for..in loops iterate over the entire prototype chain, which is virtually never what you want. Use Object.{keys,values,entries}, and iterate over the resulting array no-restricted-syntax
The body of a for-in should be wrapped in an if statement to filter unwanted properties from the prototype guard-for-in
我已經看到 JavaScript 的幾個類似問題和答案,例如使用 Object.keys(...) 但 TypeScript 也不喜歡這種方法,它失去了一些類型安全性。
有沒有辦法避免觸發 Eslint 規則,同時仍然遵守 TypeScript 最佳實踐? 我知道我可以關閉指定的規則,但我希望有一種不那么“hacky”的方式
Eslint 的抱怨有一個非常正當的理由,你基本上不應該使用for...in
除非你明確想要遍歷原型鏈,而你基本上從來沒有這樣做過。
至於rest……
TypeScript 也不喜歡這種方法,它失去了一些類型安全性。
是的。 你的問題不是Object.keys
,你的問題是運行時反射和編譯時類型安全是天敵。 所以沒有一個“干凈”的方法來做到這一點,你說“在運行時給我這個 object 的所有屬性”,這在編譯時不能安全地知道,並改變你問的機制因為那不會解決根本的潛在問題。
您有幾種選擇來處理這個問題。
instanceof
、 typeof
、 in
運算符等來縮小類型。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.