Вы можете просто использовать оператор типа typeof
, чтобы получить тип любой константы.Затем вы можете использовать псевдоним типа, чтобы дать ему имя
const ActionCreators = {
foo: (a: string): string => ("foo" + a),
bar: (a: number): string => ("bar" + a),
baz: (a: boolean): number => (a ? 256 : 123)
};
type Props = typeof ActionCreators;
/*
Same as
type Props = {
foo: (a: string) => string;
bar: (a: number) => string;
baz: (a: boolean) => number;
}
*/
Хотя между интерфейсами и псевдонимами типов есть небольшие различия, в этом случае они должны быть эквивалентны.
Редактировать
Последующий вопрос в комментариях: Как я могу изменить тип возвращаемого значения на void для всех функций-членов?
Для этого вам нужно использовать сопоставленный тип для сопоставления оригиналавведите новый тип и условный тип для извлечения типов аргументов исходной функции:
type ArgumentTypes<T> = T extends (...a: infer A) => any ? A: [] //Conditional type extracts the argument types
type Props = {
// Mapped type, maps the keys of the original type to a new type
// with the same keys, and with each key being a function with the same argument as the original
// but returning void.
[P in keyof typeof ActionCreators]: (...a: ArgumentTypes<typeof ActionCreators[P]>) => void
}