【发布时间】:2020-07-11 19:52:16
【问题描述】:
我有以下代码:
type SuperType<T = any> = {
entities?: {
[key: string]: T
};
}
class Test<T> {
value: T;
constructor(v: T) {
this.value = v;
}
update(cb: (v: T) => T) {
this.value = cb(this.value);
}
}
interface H extends SuperType<{ prop: number }> {}
const instance = new Test<H>({});
我想创建一个更新值的高阶函数:
function updateSomething<
T extends SuperType,
E = T extends SuperType<infer I> ? I : never>(arg: E) {
return function (value: T) {
return value;
}
}
如何在高阶函数中推断泛型类型?
instance.update(updateSomething(placeholder))
所以这里placeholder 应该输入为{ prop: number }
【问题讨论】:
-
你能解释更多你想用
E完成的事情吗?也许还有更多关于updateProp的返回值的例子?它会根据道具的名称仅更新名称还是仅更新 ID?也许增加id并将“先生”添加到name?
标签: typescript