Typescript 如何从多个属性动态构造类型?
我正在研究Typescript中的高级类型,到目前为止,我拥有的是一个Typescript 如何从多个属性动态构造类型?,typescript,types,typescript-generics,Typescript,Types,Typescript Generics,我正在研究Typescript中的高级类型,到目前为止,我拥有的是一个类型x,它接受一个通用参数props extensed string。作为props的值给定为name | age | email这构造了以下类型: { name: "name", age: "age", email: "email" } 上述类型由以下类型定义生成: type x<Property extends string> = { [K in Property]: K } 我想做的是
类型x
,它接受一个通用参数props extensed string
。作为props
的值给定为name | age | email
这构造了以下类型:
{
name: "name",
age: "age",
email: "email"
}
上述类型由以下类型定义生成:
type x<Property extends string> = { [K in Property]: K }
我想做的是将多个属性传递给x
,传递方式如下:
x(“姓名”、“年龄”、“电子邮件”)
生成类型x
我知道我可以通过如下方式重构方法x
来实现这一点:
let x = <props extends string>(...p: props[]): x<props> => null! // Don't know how to implement this
let x=(…p:props[]):x=>null!//我不知道如何实现这一点
但是我不知道如何从输入中构造一个具体的对象,类似于({[p]:p})
,而是迭代传递给x
的所有属性
那么,有没有一种方法可以迭代属性并动态构造类型呢 您只需迭代这些道具并将它们分配给一个新对象:
type x<Property extends string> = { [K in Property]: K }
let x = <props extends string>(...p: props[]): x<props> => {
let result = {} as x<props>
for (let k of p) {
result[k] = k
}
return result;
}
let a = x("name", "age") // Type is x<"name">
console.log(a);
然后我也可以使用props.foreach(prop=>…),这是一个软件工程课程的学校项目。老师们不喜欢使用循环、if、else、for、whiles等,所以有时候我不知道什么是允许的。但我会像循环一样ok@HarryStylesheet如果你想让他们惊叹,请使用reduce版本:我想他们会喜欢这样,整个课程都是关于函数合成、函子、幺半群和单子的。@HarryStylesheet-nah。。为此,您需要在TS中编写命令式代码,没有任何要点:P。
let x = <props extends string>(...p: props[]): x<props> => null! // Don't know how to implement this
type x<Property extends string> = { [K in Property]: K }
let x = <props extends string>(...p: props[]): x<props> => {
let result = {} as x<props>
for (let k of p) {
result[k] = k
}
return result;
}
let a = x("name", "age") // Type is x<"name">
console.log(a);
let x = <props extends string>(...p: props[]): x<props> => p.reduce((o, k) => (o[k] = k, o), {} as x<props>);