【发布时间】:2019-02-28 22:45:39
【问题描述】:
我有以下场景,我正在 TypeScript 中开发一个 vuex 插件来自动从服务器获取所需的数据。 这是我的状态定义:
export interface RootState {
users: { [id: string]: User };
someNestedSection: {
currentUserAccount: Account
}
}
我还为描述如何获取这些资源的对象创建了类型:
export type RemoteOptions<T> = {
readonly [K in keyof T]?: RemoteOptions<T[K]>|{ fetchResource: (queryData?: any) => T[K]|any };
};
所以我的RemoteOptions<T> 对象可以如下所示:
const options: RemoteOptions<RootState> = {
users: {
fetchResource: (userId: number) => 'this is NOT strictly checked'
},
someNestedSection: {
currentUserAccount: {
fetchResource: () => new Account(/* some data from server */)
}
}
}
我的RemoteOptions<T> 定义为几乎所有内容提供了很好的类型检查,它强制RemoteOptions<RootState> 对象只包含RootState 具有的那些属性(包括嵌套的属性),它甚至能够强制执行(如果没有@987654328 @ 在返回类型上)fetchResource 在options.someNestedSection.currentUserAccount 上的函数只返回Account 对象,但我不知道如何在options.users.fetchResource 上强制执行User 返回值。
问题在于fetchResource: (queryData?: any) => T[K]|any 的返回类型,我在那里有any,我需要用memberof T[K] 之类的东西替换any,但我不知道它应该是什么(没有memberof 运算符在 TypeScript 中,只有 keyof,但不适用于这种情况)。
有人知道吗?
【问题讨论】:
标签: typescript vuex