2016-03-31 63 views
2

我是新來的打字稿具有參數函數類型。打字稿 - 如何定義與任何類型的

我想要定義與任何類型的具有參數函數類型。 該函數可能有一個參數或兩個以上的參數。

我該怎麼寫?

(args: any) => any 

上面這種寫法只適用於一個參數傳遞給函數。

class NotificationCenter { 

    private observerList: Array<() => any>; 

    constructor() { 
     this.observerList = []; 
    } 

    addObserver(observer:() => any): void { 

     this.observerList.push(observer); 

    } 

} 


let notificationCenter: NotificationCenter = new NotificationCenter(); 

let observer1 =() => {}; 
let observer2 = (text: string) => {return "observer2"}; 
let observer3 = (id: number, data: Array<any>) => {return "observer3"}; 

//This works fine. 
notificationCenter.addObserver(observer1); 

//Error:Argument of type '(text: string) => string' is not assignable to parameter of type '() => any'. 
notificationCenter.addObserver(observer2); 

//Error:Argument of type '(id: number, data: any[]) => string' is not assignable to parameter of type '() => any'. 
notificationCenter.addObserver(observer3); 
+4

我想你想要的是'(... params:any [])=> any'。參見[這](http://stackoverflow.com/questions/12699058/typescript-types-for-variadic-functions) – tforgione

+0

謝謝!這就是我需要的! – hytm

回答

1

你說這個函數可以有一個參數或兩個以上的參數。這聽起來像它可以有一個或三個或更多的參數。那麼你必須重載它。

function foo(arg: any): any { /*do work*/ } 
function foo(arg: any, arg2: any, ...rest: any[]): any { /*do work*/ }