Ответы пользователя по тегу TypeScript
  • Как типизировать redux-saga?

    @camelCaseVlad
    На работе типизируем с флоу, может вам поможет, чем-то

    // @flow
    import { call, put, takeEvery } from 'redux-saga/effects';
    import { setupSagaTarget } from '@work-util';
    import { fetchApi } from './api';
    import * as constants from '../constants'
    import * as actions from '../actions';
    
    /**
     * Fetch card data Saga
     * @returns {void}
     */
    export function* fetchCData(): Iterator<*> {
      const data = yield call(fetchApi);
      if (data) {
        yield put(actions.success(data));
      }
    }
    
    export function* watchFetchRequest(): Iterator<*> {
      yield takeEvery(constants.APP_REQUEST, fetchData);
    }
    
    const sagas = [
      setupSagaTarget(watchFetchRequest, true, true),
    ];
    
    export { sagas };
    Ответ написан
    Комментировать
  • Стоит ли использовать TypeScript в Redux?

    @camelCaseVlad
    Использую Flow в проекте.

    Фот как выглядит пример Апп редусера.

    //@flow
    import type {
      ActionWithPayloadType,
      AppStateType
    } from '@project/types';
    import { OPEN_MODAL, CLOSE_MODAL, SET_USER_LOGIN } from '../constants';
    
    const initialState: AppStateType = {
      isModalOpen: false,
      isUserLoggedIn: false
    };
    
    //eslint-disable-next-line complexity
    const appReducer = (
      state: AppStateType = initialState,
      action: ActionWithPayloadType = { type: '', payload: '' }
    ) : AppStateType => {
    
      if (!action) { return state; }
    
      if (action.type === OPEN_MODAL) {
        return { ...state, isModalOpen: true };
      }
    
      if (action.type === CLOSE_MODAL) {
        return { ...state, isModalOpen: false };
      }
    
      if (action.type === SET_USER_LOGIN) {
        return { ...state, isUserLoggedIn: action.payload };
      }
    
      return state;
    };
    
    export default appReducer;


    @project/types

    export type ActionWithPayloadType = {
      type: string,
      payload: *
    };
    export type AppStateType = {
      isModalOpen: boolean,
      isUserLoggedIn: boolean
    }
    Ответ написан
    Комментировать