В машинописном тексте функция может вывести тип из своего параметра с помощью универсального метода, поэтому она может возвращать строковый литерал типа переданного параметра.
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";
Если это невозможно, любой обходной путь приветствуется.Мой худший сценарий - потребители должны сами передавать все типы асинхронных действий.