我知道有多個此類問題,但我幾乎嘗試了所有方法,但仍然出現此錯誤。我在一個vue 專案中作業。我已將我的資料定義如下:
data(){
return{
nodes: {},
edges:{},
nextNodeIndex: 0,
nextEdgeIndex: 0,
selectedNodes: [],
selectedEdges: [],
graph: ref<vNG.Instance>()
}
}
現在在一個方法中,我正在撰寫一個 addNode 函式
addNode() {
const nodeId = this.nextNodeIndex
this.nodes[nodeId] = {
name: String(nodeId),
size: 16,
color: "blue",
label: true
}
該行this.nodes[nodeId]給出錯誤 Element implicitly has an 'any' type because expression of type 'number' can't be used to index type '{}'.。我發現的大多數解決方案都告訴將 dict 定義為,const dict = {key:string}但由于我在定義節點,data所以不能使用 const。
任何建議都非常感謝。
uj5u.com熱心網友回復:
您可以顯式鍵入以下回傳型別data:
data(): { nodes: ..., ... } {
}
但這意味著你必須撰寫很多 TypeScript 可以推斷的型別。
我寧愿接受一個斷言:
nodes: {} as { [key: number]: { name: string; size: number; ... } },
甚至可能用于edges:
edges: {} as { [key: number]: ... },
但是,看到鍵是數字,您可能需要考慮使用陣列而不是物件。
uj5u.com熱心網友回復:
一個簡單的方法來注釋型別和初始值而不宣告任何東西兩次是對資料使用準系統類:
class Data {
// TODO: Fill in correct types instead of `unknown`
nodes: Record<number, unknown | undefined> = {};
edges: Record<number, unknown | undefined> = {};
nextNodeIndex = 0;
nextEdgeIndex = 0;
selectedNodes: unknown[] = [];
selectedEdges: unknown[] = [];
graph = ref<vNG.Instance>()
}
然后在您的資料方法中回傳一個實體:
data() {
return new Data();
}
這有點誤導,因為您不想將此類實際用作該類之外的類,也不想向其添加方法,但這是最不冗長的方式。只要您不濫用它,它就很方便。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/484012.html
上一篇:C中的函式引數對齊
