2017-08-16 151 views
0

我想寫箭頭功能在我喜歡的類型腳本界面,如下圖,但得到錯誤「類‘ToastrService’正確實現了接口‘IToastr’。」Arrow功能的打字稿接口,返回類型爲void

interface IToastr{ 
    (message:string,title:string):void; 
} 

@Injectable() 
export class ToastrService implements IToastr { 
    (message:string,title:string):void { 
     toastr.success(message,title); 
    } 
} 

我的問題是:我們可以定義在TS接口函數簽名,返回類型爲void?

我也嘗試搜索谷歌,以及,但沒有發現任何一例。謝謝 !!

+1

你爲什麼不把它定義爲一個普通的方法? –

+0

我之前定義爲常規方法,它也適用。但只是想用箭頭函數替換常規函數,我很驚訝這不是正常的練習。我的問題是,爲什麼我們不能這樣做?如果我們不能。 – Akash

+1

我不是一個打字稿專家,但我什至不知道的你想在這裏實現什麼。什麼是用於接口?你打算如何注入這個服務並調用這個函數?我不確定它甚至可能同時成爲一個分類和一個功能。 –

回答

1

是的,它是可能的。請參閱官方打字稿瞭解更多信息。

例1:

interface SearchFunc { 
    (source: string, subString: string): void; 
} 
let mySearch: SearchFunc; 
mySearch = function(source: string, subString: string) { 
    // do smth 
} 

例2:解決方法:您應該爲您的功能

interface IToastr{ 
    FuncName(message:string,title:string):void; 
} 

class ToastrService implements IToastr { 
    FuncName(message:string,title:string):void { 
     // toastr.success(message,title); 
    } 
} 
+0

做一些研究之後,我認爲,這是有意義的在界面命名函數。作爲箭頭功能是匿名的功能,這樣任何類/業務實現該功能將是無用的類/服務消費者,因爲它沒有名字。儘管感謝您的迴應。 – Akash

3

,你在做什麼,似乎罰款只是對功能缺失的名稱(或者如果這是一個構造函數,則constructor關鍵字缺少)

interface IToastr{ 
    toast(message:string,title:string):void; 
} 

@Injectable() 
export class ToastrService implements IToastr { 
    toast(message:string,title:string):void { 
     toastr.success(message,title); 
    } 
} 
+0

做一些研究之後,我認爲,這是有意義的在界面命名函數。由於箭頭函數是匿名函數,因此任何實現該函數的類/服務對於類/服務使用者都是無用的,因爲它沒有名稱。儘管感謝您的迴應。 – Akash