亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

樹結構的打字接口

樹結構的打字接口

幕布斯6054654 2022-08-04 16:54:53
我想為樹結構定義一個接口。每個節點可以有零個或多個子節點:export interface TreeNode {  children?: Array<TreeNode>;}我已經為s實現了一個遍歷函數。TreeNodeexport function traverseTree(treeData: Array<TreeNode> | TreeNode, callback: (treeNode: any) => any) {  // implementation omitted}我想測試它。代碼如下:const treeData = [  {    name: "root_1",    children: [      {        name: "child_1",        children: [          {            name: "grandchild_1"          },          {            name: "grandchild_2"          }        ]      }    ]  },  {    name: "root_2",    children: []  }];const traversingHistory = [];const callback = (treeNode: any) => {  traversingHistory.push(treeNode.name);}traverseTree(treeData, callback);但是,編譯失敗,因為 類型的參數不能應用于 。treeDatatraverseTree我不想向接口添加屬性,因為樹節點可以具有動態屬性。如何修改接口以接受更通用的類型?nameTreeNodeTreeNode
查看完整描述

3 回答

?
慕斯709654

TA貢獻1840條經驗 獲得超5個贊

您可能遇到的錯誤是:


對象文本可能僅指定已知屬性,并且“name”在類型中不存在


如果要允許其他鍵,則必須是該類型的一部分。您可以使用索引簽名執行此操作:


export interface TreeNode {

  [key: string]: any // type for unknown keys.

  children?: TreeNode[] // type for a known property.

}


查看完整回答
反對 回復 2022-08-04
?
qq_笑_17

TA貢獻1818條經驗 獲得超7個贊

我想使用a更適合:generic[key: string]: any

export type Tree<T> = T & {
  children?: T[];
}

保留我們想要構建樹的類型的必需字段和可選字段:對于此問題,Item 是:。ItemTree<Item>{ name: string }


查看完整回答
反對 回復 2022-08-04
?
飲歌長嘯

TA貢獻1951條經驗 獲得超3個贊

嘗試將此聯合類型與 :object

type TreeNode = {
    children?: Array<TreeNode>;
} & object;


查看完整回答
反對 回復 2022-08-04
  • 3 回答
  • 0 關注
  • 146 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號