2017-06-05 3 views
0

J'ai un projet contraint par CPU avec un grand nombre de classes et j'utilise des interfaces pour minimiser le nombre d'imports que j'utilise dans chaque module. Cependant, j'ai rencontré des problèmes lors de la déclaration de méthodes privées sur des classes qui implémentent leurs interfaces respectives. À l'heure actuelle, je suis rencontrais:Méthodes privées dans l'interface d'implémentation de la classe TypeScript

index.d.ts:

interface IColony { 
    // (other public properties) 
    // instantiateVirtualComponents(): void; 
} 

Colony.ts:

export class Colony implements IColony { 
    // (constructor and other methods) 
    private instantiateVirtualComponents(): void { 
     // (implementation) 
    } 
} 

Le problème est que tapuscrit ne semble pas me laisser déclarer des propriétés privées sur cette classe. Comme il est, se plaint tsc:

Error:(398, 3) TS2322:Type 'IColony' is not assignable to type 'Colony'. Property 'instantiateVirtualComponents' is missing in type 'IColony'. 

Je suis assez sûr que les propriétés privées et les méthodes ne doivent pas être déclarées dans l'interface, mais juste pour être sûr, si je décommenter la déclaration de méthode dans IColony, se plaint alors tsc ce qui suit (parmi beaucoup d'autres erreurs qui en résultent):

Error:(10, 14) TS2420:Class 'Colony' incorrectly implements interface 'IColony'. Property 'instantiateVirtualComponents' is private in type 'Colony' but not in type 'IColony'. 

Qu'est-ce que je fais mal ici? Pouvez-vous simplement ne pas déclarer les membres privés sur les classes qui implémentent une interface? Pour référence, Colony.ts est here et la partie correspondante de index.d.ts est here.

+0

semble fonctionner très bien dans la [aire de jeux] (https://www.typescriptlang.org/play/). Quelle version de TypeScript/tsc? – jonrsharpe

+1

À l'heure actuelle, le code de votre question fonctionne. Je m'attends à ce que les erreurs se produisent lorsque vous décommentez cette ligne dans l'interface. Vous souhaiterez peut-être afficher chaque bit de code qui génère l'erreur avec l'erreur. –

+0

J'ai ajouté des liens Github au code complet. @ jonrsharpe, je cours TypeScript 2.3.3. –

Répondre

1

Vous êtes probablement en train de faire quelque chose de similaire à:

function fn(): IColony { ... } 

let a: Colony = fn(); // error: Type 'IColony' is not assignable to type 'Colony'... 

Cette erreur se produit parce que vous essayez d'assigner une instance de IColony à une variable de type Colony et il ne fonctionne pas de cette façon (que l'autre moyen de contourner).

Si tel est le cas, alors il devrait être:

let a: IColony = fn();