2017-10-07 81 views
0

我有以下類:如何創建TypeScript類的實例?

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

我嘗試創建類的實例:

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

它調用錯誤:

Cannot read property 'show' of undefined 

我用這個library

+0

我認爲我們需要看看'show'方法或它是如何被調用的 –

+0

... btw我不認爲你需要'declare '關鍵字 - 我認爲這通常只適用於環境公司NTEXT。即它不會發出javascript –

回答

1

我不認爲你的問題是打字稿本身,但與角度依賴注入和組件是如何組成的。

如果你看看你正在使用的軟件包的源代碼,你會發現show函數實際上是由FlashMessagesComponentnot by FlashMessagesService itself實現的。

所以要創建一個它自己的實例沒有角度的依賴注入這將是棘手的,因爲你還需要提供一個抽象類ChangeDetectorRef的實例,它本身可能依賴於其他的東西,所以它可能很快就會變得非常混亂。

像下面的代碼可能會幫助你開始玩它,但它遠沒有你想要在現實世界中使用的東西。

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

編輯:

我直接寫在這裏SO和無法測試它(抱歉:(),現在檢查它更徹底似乎FlashMessagesComponent it not exported,所以我不很清楚的看到一種方式爲您創建一個實例,而不使用FlashMessagesModule和角度依賴注入生命週期

+0

我無法找到'FlashMessagesComponent' – OPV

+0

這是什麼? '{detectChanges:()=> {}};'? – OPV

+0

_I找不到FlashMessagesComponent_ - 抱歉,我剛剛檢查並且]沒有導出](https://sourcegraph.com/github.com/moff/[email protected]/-/blob/module/index。ts) –

0

你應該在之前爲你的類創建一個構造函數:

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

哪裏?應該在構建什麼? – OPV

+2

我不希望缺少造成這個錯誤的構造函數 –

+0

我認爲是聲明(接口):'export declare class FlashMessagesService {}' – OPV

0

一般語法來獲得打字稿類的實例是:

VariableName:ClassType=new ClassConstructor 

,或者你可以嘗試

Variablename=new ClassConstructor(). 

第二個會自動生成類型的註釋。