Я изучаю расширенные типы в 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})
Я могу создать тип, просто передав свойство типа string функции 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
.
Итак, есть ли способ перебирать свойства и динамически создавать тип?