Как задать тип подписи оператора функции в Typescript?

#typescript

Вопрос:

У меня есть тип подписи функции, подобный этому:

 type MyFunc = (foo: string) => string
 

Как я могу использовать эту подпись для задания типа оператора функции (не выражения функции)? Например, когда у меня есть массив функций, таких как

 [(foo) => foo   "bar", () => "bar"]
 

Не задавая тип для массива, могу ли я каким-то образом обеспечить подпись функций внутри массива, чтобы это () => "bar" приводило к ошибке из-за несоответствия типов? Я представляю себе что-то вроде этого:

 [((foo) => foo   "bar"): MyFunc, (() => "bar"): MyFunc]
 

Очевидно, что это неверный синтаксис. Есть ли способ достичь этого?

Комментарии:

1. Вы можете сделать это, если используете дополнительную функцию. Смотрите игровую площадку: tsplay.dev/mqvjjW ?

Ответ №1:

Вы можете использовать as , но () => string в настоящее время это допустимый подтип (foo: string) => string , поэтому вы не получите ошибку. (Реализация может свободно игнорировать любые аргументы.)

 type MyFunc = (foo: string) => string

[
    ((foo) => foo   "bar") as MyFunc, // No error
    (() => "bar") as MyFunc,          // No error
    ((x: number) => "bar") as MyFunc, // Error
]