#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']
в строку шаблона