考虑以下(部分类型)函数:
const fn = <T, ?? ...>(name: ??, value: T) => ({ [name]: value })
是否可以完成输入
fn("hello", someT)
会有类型
{ hello: T }
?
如果不是:是否有另一种方法可以得到类似的结果?
我正在考虑
的内容 <K extends string, T>(name: K, value: T): { [k: K]: T} => ...
但这不起作用。
答案 0 :(得分:2)
是
使用type参数捕获键的文字类型,string
的子类型,并使用它来定义映射类型
const fn = <T, N extends string>(name: N, value: T) => <{[P in N]: T}>({
[name]: value
});
不幸的是,类型断言是必需的。
const hasPOfNumber = fn('p', 52);
console.log(hasPOfNumber.p);