2017-10-07 9 views
0

J'ai la classe suivante:Comment créer une instance de classe TypeScript?

export declare class FlashMessagesService { 
    show: (text?: string, options?: Object) => void; 
    grayOut: (value: boolean) => void; 
} 

Et je tente de créer une instance de la classe:

import { FlashMessagesService } from 'angular2-flash-messages'; 
    let _flashMessagesService = new FlashMessagesService(); 

Il invoque une erreur:

Cannot read property 'show' of undefined 

J'utilise cette library

+0

Je pense que nous avons besoin de voir la méthode 'show' ou comment il est appelé –

+0

... btw Je ne pense pas que vous avez besoin de la« déclaration 'mot-clé - Je pense que c'est généralement seulement pour co ambiante ntext. c'est-à-dire qu'il n'émet pas de javascript –

Répondre

1

Je ne pense pas que vous problème est dactylographiée en soi, mais avec l'injection de dépendance angulaire et la façon dont les composants sont composés à la place.

Si vous regardez le code source du paquet que vous utilisez, vous verrez que la fonction show est réellement implémentée par les FlashMessagesComponent et not by FlashMessagesService itself. Donc, pour en créer une instance par vous-même sans l'injection de dépendances d'angular, cela va être compliqué car vous devrez également fournir une instance de la classe abstraite ChangeDetectorRef, qui peut elle-même dépendre d'autres éléments. devenir vraiment désordonné assez rapidement.

quelque chose comme le soufflet de code peut vous aider à commencer à jouer avec elle, mais il est loin d'être quelque chose que vous voulez utiliser dans le monde réel.

import { FlashMessagesService, FlashMessagesComponent } from 'angular2-flash-messages'; 
let _flashMessagesService = new FlashMessagesService(); 
let component = new FlashMessagesComponent(_flashMessagesService, { detectChanges:() => {}}); 
console.log(_flashMessagesService.show) // [Function show] 

EDIT:

Je codé directement ici sur le SO et n'a pas pu le tester (désolé :(), maintenant vérifier plus à fond, il semble que FlashMessagesComponent it not exported, donc je ne vois pas clairement un moyen pour vous de créer une instance sans utiliser FlashMessagesModule et cycle de vie d'injection de dépendance angulaire

+0

Je n'arrive pas à trouver 'FlashMessagesComponent' – OPV

+0

Qu'est-ce que c'est? '{detectChanges:() => {}};'? – OPV

+0

_Je ne peut pas trouver FlashMessagesComponent_ - désolé, je viens de vérifier et] il n'est pas exporté] (https://sourcegraph.com/github.com/moff/[email protected]/-/blob/module/index.ts) –

0

Vous devez créer un constructeur pour votre classe avant:

export class Flashmessages { 
    ... 
    //other vars 
    constructor(){ 
     this.myvar = "value"; 
    } 
} 
+0

Où? Et ce qui devrait être dans la construction? – OPV

+2

Je ne s'attendre à un manque de constructeur pour provoquer cette erreur –

+0

je pense est la déclaration est (interface): 'export classe FlashMessagesService {déclarer}' – OPV

0

La syntaxe générale pour obtenir instance de la classe dactylographiée est:

VariableName:ClassType=new ClassConstructor 

ou vous pouvez essayer

Variablename=new ClassConstructor(). 

deuxième génère automatiquement l'annotation de type.