2017-06-08 8 views
1

J'ai une classe A qui possède un accesseur pour un objet qui contient plusieurs chaînes. Le tout offre un moyen facile d'obtenir l'adresse URL d'une API Vertx.Inherit acessor dans le typecript

Mon problème est que je voudrais surcharger cette API dans une sous-classe B qui hérite de la classe A.

Quelque chose comme ça:

class A { 
    get api() { 
     return { 
      GET_LESSON : '/lesson/', 
     }; 
    } 
} 


class B extends A{ 
    get api() { 
     return _.extend(super.api, { 
      GET_CALL : '/lesson/call/', 
     }); 
    } 
} 

Mais cela ne fonctionne pas, je reçois le erreur:

TS2340:Only public and protected methods of the base class are accessible via the 'super' keyword.

Pourquoi j'ai cette erreur? Est-ce un comportement prévu pour les accesseurs Typescript?

+0

L'erreur indique tout. Votre api getter est privé à la classe A, donc vous ne pouvez pas y accéder dans la classe B. – realbart

+0

@realbart http://www.typescriptlang.org/play/index.html#src=class%20A%20%7B%0D%0A % 20% 20% 20% 20public% 20get% 20api% 20()% 20% 7B% 0D% 0A% 20% 20% 20% 20% 20% 20% 20% 20 retour 20% 7B% 0D% 0A% 20 % 20% 20% 20% 20% 20% 20% 20% 20% 20% 20% 20GET_LESSON% 20% 3A% 20 '% 2Flesson% 2F'% 2C% 0D% 0A% 20% 20% 20% 20% 20 % 20% 20% 20% 7D% 3B% 0D% 0A% 20% 20% 20% 20% 7D% 0D% 0A% 7D% 0D% 0A% 0D% 0A% 0D% 0Aclasse% 20B% 20extends% 20A% 7B % 0D% 0A% 20% 20% 20% 20%% 20api% 20()% 20% 7B% 0D% 0A% 20% 20% 20% 20% 20% 20% 20% 20return% 20_.extend (super.api % 2C% 20% 7B% 0D% 0A% 20% 20% 20% 20% 20% 20% 20% 20% 20% 20% 20% 20GET_CALL% 20% 3A% 20 '% 2Flesson% 2Fcall% 2F'% 2C % 0D% 0A% 20% 20% 20% 20% 20% 20% 20% 7D)% 3B% 0D% 0A% 20% 20% 20% 7D% 0D% 0A% 7D –

+0

@realbart Je pensais que chaque attribut ou La méthode était publique par défaut. Et rendre l'accesseur public en classe A n'aide pas. – Zibron

Répondre

0

Est-ce un comportement destiné à Tapuscrit accesseurs

Oui. Ceci est suivi ici: https://github.com/Microsoft/TypeScript/issues/338

Raison pourquoi ce n'est pas encore pris en charge: La recherche actuelle super est vraiment simple. Changer cela a des impacts de performance couverts dans la question comme mentionné.