【发布时间】:2019-02-10 12:48:55
【问题描述】:
亲爱的 TypeScript-3-Gurus,
有人可以帮我定义一个泛型类型GuruMagic<T> 吗?
T 是一个返回函数的函数,例如这个:
fetchUser(id: Id) => (dispatch: Dispatch) => Promise<boolean>
然后泛型类型应该替换fetchUser的ReturnType与返回函数的ReturnType。像这样:
type dispatchedAction = GuruMagic<typeof fetchUser>;
// so that dispatchedAction === (id: Id) => Promise<boolean>
我知道我可以申请ReturnType两次得到Promise<boolean>,但是我不知道如何将原始参数(可能是多个)与这个返回类型连接起来。 TypeScript (3.x) 甚至可以做到这一点吗?
为清楚起见的其他示例
const f1 = (a: number, b: string) => () => a;
type guruF1 = GuruMagic<typeof f1>; // (a: number, b: string) => number
const f2 = () => (name: string) => (otherName: string) => name + otherName;
type guruF2 = GuruMagic<typeof f2>; // () => (otherName: string) => string
动机
类型安全Redux-Thunk。当我 connect 一个 react 组件时,如果我能这样做会很棒:
import { fetchUser } from './myActions';
interface IPropsOfMyComponent {
fetchUser: GuruMagic<typeof fetchUser>;
}
// ... MyComponent Definition ...
connect<{}, IPropsOfMyComponent, {}>(null, { fetchUser })(MyComponent)
【问题讨论】:
标签: reactjs typescript redux typescript-typings redux-thunk