[英]Best way to solve typescript error - property does not exist on type
我有幾種不同的情況,我試圖在打字稿中的數組或對象上定義自制屬性,但通常會出現錯誤:
“屬性 x 在對象類型(或數組類型)上不存在”
例如,我在 Angular 中使用打字稿,並根據 Angular 類型定義文件定義了范圍:
scope:ng.IScope
但是當我嘗試通過執行以下操作在范圍上創建新屬性時:
scope.anotherProperty = "string";
我收到上面提到的錯誤。 我知道我可以通過執行以下操作之一來解決它:
scope["anotherProperty"] = "string";
或者
(<any>scope).anotherProperty = "string;
另一個例子是當我的 d3 圖中有這樣的東西時:
function panZoomNode (node:any) {
for (var i = 0; i < renderedNodes.length; i++) {
if (node.id === renderedNodes[i].id) {
}
}
}
理想情況下,我想將該 (node:any) 參數更改為:
(node:Object)
但是當我這樣做時,我收到一條錯誤消息,提示“類型對象上不存在屬性 ID”。 我知道我可以用我上面提到的解決方案來糾正它,但這對我來說似乎有點草率。 有沒有更好的方法或最好的打字稿方法讓數組和對象都正確運行?
謝謝
您可以通過將以下內容添加到您的代碼中,將額外的屬性添加到ng.IScope
接口:
interface ng.IScope {
anotherProperty?:string;
}
這將允許你打電話
scope.anotherProperty = "string";
在沒有看到您的其余代碼並且不知道node
實際代表什么的情況下,我只能說為了讓編譯器滿意,您只需要在 TS 代碼中包含您引用的成員。 如果您做得正確,則創建一個包含所有成員的類。 如果它派生自現有類或實現現有接口,那么您應該從類定義中的那些繼承。
編輯:如果您還沒有,您應該在絕對類型的 GitHub 存儲庫中查看 D3 定義。 假設node
是 D3 類型,您可以使用它來解決您的問題並避免編寫自己的類。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.