Как получить универсальное имя и использовать его для создания свойства интерфейса в TypeScript?

#typescript #typescript-generics

Вопрос:

Фон:

Допустим, у меня есть объявление типа тела HTTP-ответа:

 interface response {  code: number,  message: string }  

Извлекая данные из разных API, я хотел бы, чтобы интерфейс response имел определенные дополнительные свойства, например:

 interface responseProject extends response {  projectInformation: project /* project interface is declared but omit in this question */ }  ... and so many different interfaces  

Я бы хотел переработать их с помощью generic.

Проблема:

Обратите внимание , что имя свойства projectInformation отличается от типа данных project в интерфейсе responseProject , поэтому я, естественно, хотел бы, чтобы такие вещи были в TS:

 interface responselt;Tgt; {  code: number,  message: string,  [`response${T's name when passing in}`]: T }  

При использовании литерала шаблона имя свойства интерфейса всегда должно соответствовать универсальному.

Тем не менее, я не могу найти точное ключевое слово для достижения этой цели, возможно ли это или какая-либо лучшая практика?

Комментарии:

1. вы можете перейти T в литералы шаблона, если T-строка. но если это не так, то это невозможно без обходного пути. тип машинописи не имеет toString метода под капотом. Вы можете добавить дополнительное свойство name для T и передать T['name'] в строку шаблона