我需要将函数的结果定义为带有参数字段名称的对象。像这样:
function generate<R>(name: string, value: () => R): { [name]: R } {
return {
[name]: value()
};
}
const s = generate('foo', () => 1);
assert(s.foo === 1);
有可能吗?
答案 0 :(得分:3)
您可以借助重载来实现它:
function generate<T extends string, R>(name: T, value: () => R): Record<T, R>
function generate<T extends string, R>(name: T, value: () => R) {
return {
[name]: value()
}
}
const s = generate('foo', () => 1); // ecord<"foo", number>