簡體   English   中英

解決打字稿錯誤的最佳方法 - 類型上不存在屬性

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM