網站搜尋

javascript - 引入抽象類別或屬性時的 Typescript 錯誤?


我有一個 DOCUMENTATION_CATALOG 它被定義為這樣:

export const DOCUMENTATION_CATALOG: {[key:string]:TopicCategory[]} = {}

我們可以像這樣獲取 TopicCategory 陣列;

const values:TopicCategory[] =
     Object.keys(DOCUMENTATION_CATALOG).map(
     key => DOCUMENTATION_CATALOG[key])

當我使用 AbstractTopic 擴展 TopicCategory 時,我對 values 變數收到以下錯誤:

const values: TopicCategory[] 類型 'TopicCategory[][]' 無法指派給類型 'TopicCategory[]'。類型 'TopicCategory[]' 與類型 'TopicCategory' 沒有共同的屬性。

這是 Stackblitz

我將它稍微再隔離了一點。如果 TopicCategory 中沒有任何屬性,就不會觸發錯誤。

答案#1

你的 DOCUMENTATION_CATALOG 是一個從 string 映射到 TopicCategory[] 的對應表。

你的 values 是 TopicCategory[] 類型,但傳入 map() 的回呼函式返回 DOCUMENTATION_CATALOG 中的某個值,也就是說,返回的是 TopicCategory[]。因此,map() 調用的結果是一個 TopicCategory[] 的陣列,也就是 TopicCategory[][]。

我無法提出任何建議,因為我不確定 value 的預期用途,或者 DOCUMENTATION_CATALOG 是否具有錯誤的類型。

有兩種不同的解決方案:

要麼 value 需要是 TopicCategory[][] 類型,

或 DOCUMENTATION_CATALOG 需要是 {[key:string]:TopicCategory}。