2016-03-31 4 views
2

TypeScriptを初めて使用しました。TypeScript - 任意のタイプの引数を持つ関数タイプを定義する方法

任意のタイプの引数を持つ関数タイプを定義したいと考えています。 この関数は、1つの引数または3つ以上の引数をとります。

どうすればいいですか?

(args: any) => any 

このように書くことは、1つの引数が関数に渡された場合にのみ機能します。

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'だと思います。 [this](http://stackoverflow.com/questions/12699058/typescript-types-for-variadic-functions) – tforgione

+0

ありがとう!それだけが必要! – hytm

答えて

1

この関数には、1つの引数または3つ以上の引数を指定できます。それは1つまたは3つ以上の引数を持つことができるように聞こえる。あなたはそれを過負荷にする必要があります。

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