我对类型记录有困难,我试图动态地推断一个对象的属性。
看看下面的代码
const Actions = {
globalUI: {
openModal: 'openModal'
}
}
type Param = keyof typeof Actions;
type T = <T, K extends keyof T>(action: T, key: K) => T[K];
const fn = (param: Param) => {
const action = mapper(Actions, param);
return action
}
const mapper:T = (action, name) => {
return action[name]
}
const action = fn('globalUI');

如您所见,类型记录可以推断出全局UI属性。
但是,当我在Actions对象中放置附加属性时

类型记录不能推断对象属性
const Actions = {
globalUI: {
openModal: 'openModal'
},
LP: {
addDirectory: 'addDirectory'
}
}
type Param = keyof typeof Actions;
type T = <T, K extends keyof T>(action: T, key: K) => T[K];
const fn = (param: Param) => {
const action = mapper(Actions, param);
return action
}
const mapper:T = (action, name) => {
return action[name]
}
const action = fn('globalUI');

我怎样才能做到这一点?请给出任何想法
发布于 2022-06-16 12:25:26
您的mapper函数按预期工作:
type T = <T, K extends keyof T>(action: T, key: K) => T[K];
const mapper:T = (action, name) => {
return action[name]
}
const action = mapper(Actions, 'globalUI');
action.openModel // works greak 问题在于fn函数,它将联合推断为返回类型。在您的示例中使用{ openModal: string } | { addDirectory: string }。
因此,您需要使用泛型来显化返回类型:
const fn = <S extends Param>(param: S): typeof Actions[S] => {
const action = mapper(Actions, param);
return action
}
const action = fn('globalUI');
action.globalUI; // Ok nowhttps://stackoverflow.com/questions/72643017
复制相似问题