#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
]