تايبسكريبت - مصفوفة مخصصة من الدوال


أجد صعوبة في معرفة ما إذا كان من الممكن في TypeScript إعلان مصفوفة من الدوال ذات نوع ثابت.

على سبيل المثال، يمكنني فعل هذا:

foo: (data:string) => void = function (data) {};

لكن إذا أردت أن يكون foo مصفوفة من الدوال التي تأخذ سلسلة نصية ولا ترجع شيئًا، كيف أفعل ذلك؟

foo: (data:string) => void [] = [];

لا يعمل لأن TypeScript يعتقد أنها دالة تأخذ سلسلة وتعيد مصفوفة من النوع void، ويبدو أنه لا يحب أن أحاول تغليف الدالة بالأقواس.

أي أفكار؟

الإجابة: بفضل محمد أدناه، إليك مثال يعمل في ملعب TypeScript:

class whatever {
public foo: { (data: string): void; }[] = [];

    dofoo() {
        for (var i=0; i < this.foo.length; i++) {
             this.foo[i]("test");
        }
    }
}

var d = new whatever();

d.foo.push(function(bar){alert(bar)})
d.foo.push(function(bar){alert(bar.length.toString())})

d.dofoo();

الإجابة رقم 1

يمكنك العثور على هذا في قسم مواصفات اللغة 3.6.4:

foo: { (data: string): void; } []

الإجابة رقم 2

طرق أخرى (أحدث، وأكثر قابلية للقراءة) لكتابة مصفوفة من الدوال باستخدام الأسهم السميكة:

let foo: Array<(data: string) => void>;
let bar: ((data: string) => void)[];

الإجابة رقم 3

أو foo: ((data: string) => void)[]