javascript - Chyba TypeScript pri zavádzaní abstraktnej triedy alebo vlastností?


Mám KATALÓG_DOKUMENTÁCIE, ktorý je definovaný takto:

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

Môžeme získať pole TopicCategory takto;

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

Keď rozšírim TopicCategory pomocou AbstractTopic, získam nasledujúcu chybu pre premennú values:

const values: TopicCategory[] Typ 'TopicCategory[][]' nie je priraditeľný k typu 'TopicCategory[]'. Typ 'TopicCategory[]' nemá žiadne spoločné vlastnosti s typom 'TopicCategory'.

Toto je Stackblitz

Izoloval som to trochu ďalej. Chyba sa nevyskytne, ak vo TopicCategory nie sú žiadne vlastnosti.

Odpoveď č. 1

Váš DOCUMENTATION_CATALOG je mapa z string na TopicCategory[].

Vaša values je typu TopicCategory[], ale spätná funkcia odovzdaná do map() vracia jednu z hodnôt v DOCUMENTATION_CATALOG, teda TopicCategory[]. Preto je výsledok volania map() pole TopicCategory[], teda TopicCategory[][].

Nemôžem dať žiadne návrhy, pretože si nie som istý, aké je zamýšľané použitie value, alebo či DOCUMENTATION_CATALOG nemá nesprávny typ.

Existujú dve rôzne riešenia:

Buď musí byť value typu TopicCategory[][],

alebo DOCUMENTATION_CATALOG musí byť {[key:string]:TopicCategory}.