2016-03-31 31 views
2

TypeScript konusunda yeniyim.TypeScript - Herhangi bir türdeki argümanlara sahip İşlev Tipi nasıl tanımlanır?

Herhangi bir Tür ile argümanlara sahip İşlev Türü tanımlamak istiyorum. İşlev, bir bağımsız değişken veya ikiden fazla bağımsız değişken olabilir.

Nasıl yazmalıyım?

(args: any) => any 

Yukarıdaki şekilde yazmak, yalnızca bir bağımsız değişken işleve iletildiğinde çalışır.

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

Bence istediğin şey '(... params: any []) => any'. Bkz. [This] (http://stackoverflow.com/questions/12699058/typescript-types-for-variadic-functions) – tforgione

+0

Teşekkürler! İhtiyacım olan bu! – hytm

cevap

1

İşlev bir argüman veya ikiden fazla bağımsız değişken içerebilir. Bu, bir veya 3 veya daha fazla argümana sahip olabileceği anlamına geliyor. O zaman onu aşırı yüklemelisin.

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