Returntype любой вместо неизвестного для нетипизированных редукторов - PullRequest
1 голос
/ 05 февраля 2020

Я нахожусь в процессе рефакторинга большого состояния редукции, моя проблема в том, что редукторы, которые еще не преобразованы в машинописный текст, возвращают unknown, и я бы предпочел, чтобы он возвратил any. Есть ли способ изменить откат по умолчанию ReturnType?

import { combineReducers } from 'redux';
import { connectRouter } from 'connected-react-router';
import pageReducer from './page';

const rootReducer = history =>
  combineReducers({
    router: connectRouter(history),
    page: pageReducer,
    ....
    ....
  });

export type AppState = ReturnType<ReturnType<typeof rootReducer>>

, набрав для combReducers:

export function combineReducers<S>(
  reducers: ReducersMapObject<S, any>
): Reducer<S>
export function combineReducers<S, A extends Action = AnyAction>(
  reducers: ReducersMapObject<S, A>
): Reducer<S, A>

1 Ответ

0 голосов
/ 06 февраля 2020

Код в вашем вопросе, кажется, не является минимально воспроизводимым примером (или, по крайней мере, я не могу заставить его скомпилировать мои ограниченные знания о редуксе), так что извините, если следующее не не решить вашу проблему. Предполагая, что @ JuanMendes комментарий является правильным предложением, вот как можно написать UnknownToAny:

type UnknownToAny<T> = unknown extends T ? any : T;

И, следовательно, вы можете сделать свой собственный ReturnType, который выводит any вместо unknown:

type MyReturnType<T extends (...args: any) => any> = UnknownToAny<ReturnType<T>>;

Давайте проверим это:

function returnsNumber() { return 1; }
type N = MyReturnType<typeof returnsNumber>; // number

function returnsUnknown() { return 2 as unknown; }
type U = MyReturnType<typeof returnsUnknown>; // any

function returnsAny() { return 3 as any; }
type A = MyReturnType<typeof returnsAny>; // any

Выглядит хорошо для меня. Надеюсь, что это поможет вам; удачи!

Детская площадка ссылка на код

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