Создать шаблон интерфейса TypeScript - PullRequest
0 голосов
/ 13 мая 2019

Я заметил, что много повторений происходит, когда я расширяю свою базу кода, когда дело доходит до создания интерфейсов TypeScript в моем проекте.

Смотрите это:

interface IErrorResponse {
  code: number
  message: string
}

// Feature 1
type FEATURE_1_KEYS =
  | 'fetchingActivities'
  | 'fetchingActivityTypes'

interface IFeature1ErrorAction
  extends IErrorResponse {
  key: FEATURE_1_KEYS
}

// Feature 2
type FEATURE_2_KEYS =
  | 'fetchingSomethingElse'
  | 'updatingSomething'

interface IFeature2ErrorAction
  extends IErrorResponse {
  key: FEATURE_2_KEYS
}

То есть, когда я использую последние ErrorAction с (интерфейсы), я бы использовал IFeature1ErrorAction и IFeature2ErrorAction. Мой проект имеет много функций.

Есть ли способ создать IErrorAction, который построен из моего IErrorResponse, где я просто передаю эти FEATURE_KEYS для ключа?

Тогда я мог бы использовать это так IErrorAction<FEATURE_1_KEYS>.

Это сэкономило бы много повторений в моем процессе разработки, и я уверен, что это можно сделать, я просто не уверен, как.

По существу, результат этого интерфейса для IErrorAction<FEATURE_1_KEYS> будет отображать следующий интерфейс:

interface IErrorAction = { // How do I get that `TEMPLATED_KEYS` in there?
  code: number,
  key: TEMPLATED_KEYS,
  message: string
}

1 Ответ

1 голос
/ 13 мая 2019

Вам просто нужно сделать базовый интерфейс универсальным, принимая параметр типа, который расширяет string:

interface IErrorResponse<TFeatures extends string> {
  code: number
  message: string
  key: TFeatures
}

// Feature 1
type FEATURE_1_KEYS =
  | 'fetchingActivities'
  | 'fetchingActivityTypes'

type IFeature1ErrorAction = IErrorResponse<FEATURE_1_KEYS> // 

// Feature 2
type FEATURE_2_KEYS =
  | 'fetchingSomethingElse'
  | 'updatingSomething'

type IFeature2ErrorAction = IErrorResponse<FEATURE_2_KEYS>

IErrorResponse<FEATURE_1_KEYS> и IErrorResponse<FEATURE_2_KEYS> могут иметь псевдонимы, как указано выше, или вы можете использовать их напрямую.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...