2017-06-12 20 views
-2

當使用角4和打字稿我已經定義了這個功能發箭不是一個函數

 
    

 @Injectable() 
    export class XService { 
    display: (message?: string) => Promise<boolean>;  
    } 

    @Component({ 
    templateUrl: './app/x/x.html', 
    styleUrls: ['./app/x/x.component.css'] 
    }) 
    export class XEditComponent { 
    constructor(private _xService: XService) { } 
    deleteX(): void { 
     let msg = "Do you really want to delete !"; 
     this._xService.display(msg).then((responseOk) => { 
     //..... 
     }); 
    } 
} 

,但我總是得到一個類型錯誤「顯示」不是一個函數。

+4

如果添加實際生成的代碼的一部分t他錯了。你如何試圖執行這個功能? –

+0

你已經聲明'display'是一個函數,但是分配給它的是什麼?如果它沒有賦值,它將會是'undefined',如果你試圖把它作爲一個函數調用,那麼你所描述的錯誤將會受到影響。 – cartant

回答

2

您尚未實際定義函數。你只定義了它的類型。現在display將是未定義的。

定義功能:

export class XService { 
    display: (message?: string) => Promise<boolean> = (message) => { 
     // Do something more useful here 
     return Promise.resolve(true); 
    } 
} 

或者你可以刪除類型聲明,讓編譯器推斷類型:

export class XService { 
    display = (message: string | undefined): Promise<boolean> => { 
     // Do something more useful here 
     return Promise.resolve(true); 
    } 
} 

或者,您可以將您的聲明改變方法的語法,而不是屬性的語法:

export class XService { 
    display(message: string | undefined): Promise<boolean> { 
     // Do something more useful here 
     return Promise.resolve(true); 
    } 
}