Типизированный массив функций

голоса
43

Я изо всех сил, чтобы выяснить, если это возможно в машинописном объявить статически типизированный массив функций.

Например, я могу сделать это:

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

Но если я хочу Foo быть массив функций, которые принимают строку и не возвращать ничего, как я могу это сделать?

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

Не работаю, потому что машинопись думает, что это функция, которая принимает строку и возвращает массив пустоты, и это не похоже, как я пытаюсь обернуть эту функцию в скобках.

Есть идеи?

Ответ : Благодаря Mohamed ниже, вот пример , который работает в машинописи Playground:

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();
Задан 04/10/2012 в 20:41
источник пользователем
На других языках...                            


2 ответов

голоса
61

Вы можете найти это в спецификации языка разделе 3.5.5:

foo: { (data: string): void; } []
Ответил 04/10/2012 в 20:55
источник пользователем

голоса
28

Другие (более новые, более считываемые) способы ввести массив функций с помощью жира стрелки:

let foo: Array<(data: string) => void>;
let bar: ((data: string) => void)[];
Ответил 23/04/2017 в 15:28
источник пользователем

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more