2014-11-26 3 views

ответ

1

это, кажется, работает для меня

private _tasks :Array<(x: T) => boolean>; 
+0

В TypeScript 1.4 вы сможете использовать этот синтаксис в скобках или создать для него псевдоним типа. Но до этого, ваш вариант - единственный возможный способ, да. Или вы можете создать интерфейс только с одной сигнатурой вызова, и он будет структурно идентичен вашей подписи. – Anton

+1

Я добавлю, что 'T []' определяется как 'Array ', поэтому здесь нет потери точности; в большинстве случаев это наиболее читаемый обходной путь (я лично ненавижу литералы с одним перегрузочным типом!) –

1

Вы можете использовать интерфейс, чтобы сделать тип более читаемым:

interface Task<T> { 
    (x: T) : boolean; 
} 

function example<T>(...tasks: Task<T>[]) { 

} 

example(
    (str: string) => true, 
    (str: string) => false 
); 
2

У вас есть скобки неправильно для встроенных объявлений. Используйте { не (:

class Foo<T>{ 
    private _tasks: { (x: T): boolean }[]; 

    constructor(...tasks: { (x: T): boolean }[]) { 
     this._tasks = tasks; 
    } 
} 

И как сказал стив Фентон Я хотел бы использовать интерфейс только для удаления дубликатов.

Смежные вопросы