Как в TS сделать тип типо { id: number, [key in keys]: string } ???

В TypeScript вы можете использовать индексные типы для создания типов, которые имеют свойства с динамическими именами. Для создания типа, который имеет свойство "id" типа "number" и динамические свойства с именами из массива "keys" и типом "string", вы можете использовать следующий синтаксис:

type MyType<Keys extends string> = {
  id: number;
} & {
  [key in Keys]: string;
};

В этом коде мы определяем обобщенный тип "MyType", принимающий параметр "Keys", который должен быть строковым типом. Мы затем определяем тип, содержащий свойство с именем "id" типа "number", а также используем индексные типы для создания динамических свойств с именами из параметра "Keys" и типом "string".

Вы можете использовать этот тип следующим образом:

const keys = ["prop1", "prop2", "prop3"] as const;
type MyObjectType = MyType<typeof keys>;

const obj: MyObjectType = {
  id: 1,
  prop1: "value1",
  prop2: "value2",
  prop3: "value3",
};

В этом примере мы указываем тип "keys" в качестве параметра при создании объекта типа "MyObjectType". Затем мы создаем объект "obj", который должен содержать свойства "id", "prop1", "prop2" и "prop3" с соответствующими значениями.

Надеюсь, это помогает! Если у вас возникнут еще вопросы, пожалуйста, не стесняйтесь задать их.