Строковые общие ограничения в качестве вычисляемого ключа

#typescript #generics

#typescript #общие ограничения

Вопрос:

Я хочу определить универсальный тип, где я могу передать строковое значение в качестве универсального аргумента и использовать его для определения ключа для типа, например:

 const foo: MyType<'hello'> = {
  hello: "Goodbye",  // this key is required
  bar: 2
}
  

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

 const type MyType<T extends string> = {
  [key: T]: string,
  bar: number,
};
  

Однако я получаю сообщение об ошибке, в котором говорится, что An index signature parameter type must be 'string' or 'number' , хотя в данном контексте это должна быть строка. Существует ли какой-то другой синтаксис для этой проблемы? Или это ограничение typescript в настоящее время?

Ответ №1:

Может быть, что-то вроде этого:

 const foo: MyType<'hello'> = {
  hello: "Goodbye",  // this key is required
  bar: 2
}

type MyType<K extends string> = {
    bar: number;
} amp; Record<K, string>