Typescript: возможно ли, чтобы функция возвращала динамический строковый литерал? - PullRequest
0 голосов
/ 15 февраля 2019

В машинописном тексте функция может вывести тип из своего параметра с помощью универсального метода, поэтому она может возвращать строковый литерал типа переданного параметра.

export function getActionType<T>(actionType: T): T {
  return actionType;
}

const actionType = getActionType("GET_PRODUCTS"); // actionType: "GET_PRODUCTS"

Однако я пытался выяснить,без успеха, как функция может возвращать динамический строковый литерал без переданного параметра.По сути, мне нужна функция, которая возвращает типы асинхронных действий Redux, которые состоят из типов invoked, pending, fulfilled и rejected.Потребителю нужно просто ввести baseActionType, и он будет добавлять другие суффиксы к правильным словам и должен возвращать правильный строковый литерал для каждого из них.

// what should be SomeType?
export function getAsyncActionTypes<T>(baseActionType: T): SomeType {
  return {
    invoked: baseActionType,
    pending: baseActionType + "_PENDING",
    fulfilled: baseActionType + "_FULFILLED",
    rejected: baseActionType + "_REJECTED"
  };
}

// ideal usage, but can't figure out implementation
const actionTypes = getAsyncActionTypes("GET_PRODUCTS");
const invokedType = actionTypes.invoked // invokedType: "GET_PRODUCTS";
const pendingType = actionTypes.pending // pendingType: "GET_PRODUCTS_PENDING";
const fulfilledType = actionTypes.fulfilled // fulfilledType: "GET_PRODUCTS_FULFILLED";
const rejectedType = actionTypes.rejected // rejectedType: "GET_PRODUCTS_REJECTED";

Если это невозможно, любой обходной путь приветствуется.Мой худший сценарий - потребители должны сами передавать все типы асинхронных действий.

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