【发布时间】:2019-08-10 04:38:08
【问题描述】:
我正在研究 Typescript 中的高级类型,目前我所拥有的是一个 type x,它接受一个通用参数 props extends string。给定 props 的值是 name | age | email 这构造了以下类型:
{
name: "name",
age: "age",
email: "email"
}
上面的类型是由下面的类型定义生成的:
type x<Property extends string> = { [K in Property]: K }
我也有上述类型的类型构造函数:
let x = <props extends string>(p: props): x<props> => (<x<props>>{[p]: p})
我可以通过简单地将字符串类型的属性传递给函数x来生成类型:
x("name") // Type is x<"name">
我想做的是将多个属性传递给x,以这样的方式:
x("name", "age", "email") 产生类型 x<"name" | "age" | "email">。
我知道我可以通过像这样重构 x 方法来实现:
let x = <props extends string>(...p: props[]): x<props> => null! // Don't know how to implement this
但我不知道如何从该输入构造一个具体对象,类似于(<x<props>>{[p]: p}),但遍历传递给x 的所有属性。
那么有没有办法遍历属性并动态构造一个类型?
【问题讨论】:
标签: typescript types typescript-generics