2017-06-15 1 views
2

Comment est-ce que je fais typeof BaseListComponent ci-dessous assignable?Définir typeof classe abstraite dans le typecript

Le code ci-dessous jette l'erreur suivante:

Type ' ({ title: string; component: typeof QuestionsListComponent; } | { title: string; component: ...' is not assignable to type '{ title: string; component: typeof BaseListComponent; }[]' .

Extrait:

abstract class BaseListComponent { 
    protected title 
} 

class WeatherListComponent extends BaseListComponent {} 

class QuestionsListComponent extends BaseListComponent {} 

let containerItems: Array<{title: string, component: typeof BaseListComponent}>; 
containerItems = [ 
    {title:'TypeScript', component: QuestionsListComponent}, 
    {title:'Angular2', component: QuestionsListComponent}, 
    {title:'Weather', component: WeatherListComponent} 
] 

P.S ceci est un extrait d'une application simplifiée angulaire et donc il est logique derrière cette folie.

+1

'BaseListContainerComponent' n'est pas la même chose que' BaseListComponent' dans votre exemple. Votre exemple fonctionne bien pour moi dans le [TypeScript Playground] (https://www.typescriptlang.org/play/). – Raven

+0

Désolé, j'ai simplifié les noms mais j'ai oublié de le faire également dans le message d'erreur. C'est vraiment étrange que cela ne fonctionne pas dans un environnement angulaire mais dans le terrain de jeu ... – Tom

+0

Dans votre message d'erreur, vous essayez d'assigner un type 'OU' ('{} | {}') à un array ('{...} []') – Raven

Répondre

2

Utilisation de l'interface de angulaire Type a été la solution. Une meilleure explication de ce que Type est peut être trouvé here. Les étapes pour résoudre:

  1. Importation Type comme ceci: import { Type } from "@angular/core";

  2. Remplacer typeof BaseListComponent avec Type<BaseListComponent>


Pour les personnes qui viennent ici qui n'utilisent pas angulaire, this thread pourrait être utile .

0

Je peux me tromper, mais isnt component: typeof BaseListComponent déclarant component être de type Type

devrait pas être juste component: BaseListComponent

+0

Merci pour votre réponse: Il en résulte une erreur: 'Type '({title: string; component: typeof QuestionsContainerComponent;} | {titre: chaîne; composant: ... 'n'est pas assignable au type' {title: string; component: BaseListContainerComponent;} [] '. ' – Tom