我有一个对象的类型和该类型对象的键。如何得到键对应值的类型?
我有以下功能:
function toPartial<T>(key: keyof T, value: T[typeof key]): Partial<T> {
const partial: Partial<T> = {};
partial[key] = value;
return partial;
}
value
的当前类型是错误的,因为它包含了所有键的类型与键的类型。
示例:
type ExampleType = {
id: string,
amount: number
}
const key = "amount";
const value = "abc"
toPartial<ExampleType>(key, value); // with my implementation there is no type error, but it should because a string is not assignable to `amount` of `Example type`.
2条答案
按热度按时间ddhy6vgd1#
类似的方法很有效:
该值与键相链接。另外,返回类型可能会通过使用
Pick
得到改进!Playground
5n0oy7gb2#
这完全可以通过inference的参数来完成,但是需要一个higher-order辅助函数来创建适当的约束。
这是因为TypeScript当前不允许只提供 * 一些 * 泛型类型参数:目前要么全部要么没有。你可以在下面的GitHub问题上阅读更多信息:microsoft/TypeScript#10571 - Allow skipping some generics when calling a function with multiple generics
下面是helper函数的外观:
您可以通过以下方式将其用于示例类型和值:
如果你想创建一个受特定类型约束的专用函数(例如你的示例类型),你也可以这样写:
TSPlayground的代码