Проверка типа с помощью Flow - PullRequest
0 голосов
/ 01 апреля 2020

У меня есть вопрос. Я написал проверку типа потока для проверки моего редуктора. Произошла ошибка. Вы можете объяснить мне, что является причиной ошибки. Это мой код.

// @flow
import {SET_USER} from "./action-types";
import type {SetUserAction} from "./user-actions"; // export type SetUserAction = (user: User) => Action;
export type State = {
    +username: ?string,
    +firstName: ?string,
    +lastName: ?string,
    +email: ?string,
    avatar?: ?string,
}

export type Action = SetUserAction;

const initialState: State = {
    username: null,
    firstName: null,
    lastName: null,
    email: null,
    avatar: null,
};

type Reducer = (state: State, action: Action) => State;

const userReducer:Reducer = (state = initialState, action) => {
    switch (action.type) {
        case SET_USER:
            return {...action.payload};
        default:
            // (action: empty);
            return state;
    }
};

export {userReducer};

Это ошибки.

Ошибка ---------------------- -------------------------------------------------- ----- src / redux / User / user-actions. js: 25: 48 Невозможно назначить функцию для setUser, так как отсутствует подпись вызова, объявляющая ожидаемый параметр / тип возврата в литерал объекта [1], но существует в SetUserAction [2] в возвращаемом значении. . ЦСИ / перевождь / User / пользовательские действия js: 25: 48 25 | const экспорта setUser: SetUserAction = user => ({тип: SET_USER, полезная нагрузка: пользователь}); ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [1] Ссылки: . ЦСИ / перевождь / User / пользовательские действия js: 24: 45 24 | тип экспорта SetUserAction = (пользователь: пользователь) => действие; ^^^^^^ [2] Ошибка ------------------------------------------------- ---------------------------- src / redux / User / user-reducer. js: 26: 20 Невозможно получить action.type, так как свойство type отсутствует в статике типа функции [1]. . ЦСИ / перевождь / User / пользователь-редуктор js: 26: 20 26 | switch (action.type) { ^^^^ Ссылки: . ЦСИ / перевождь / User / пользователь-редуктор js: 23: 39 23 | type Reducer = (состояние: состояние, действие: действие) => состояние; ^^^^^^ [1] Ошибка ------------------------------------------------- ---------------------------- src / redux / User / user-reducer. js: 26: 13 Свойство type отсутствует в статике типа функции [1]. . ЦСИ / перевождь / User / пользователь-редуктор js: 26: 13 26 | switch (action.type) { ^^^^^^^^^^^ Ссылки: . ЦСИ / перевождь / User / пользователь-редуктор js: 23: 39 23 | type Reducer = (состояние: состояние, действие: действие) => состояние; ^^^^^^ [1] Ошибка ------------------------------------------------- ---------------------------- src / redux / User / user-reducer. js: 28: 31 Невозможно получить action.payload, так как свойство payload отсутствует в статике типа функции [1]. . ЦСИ / перевождь / User / пользователь-редуктор js: 28: 31 28 | return {... action.payload}; ^^^^^^^ Ссылки: . ЦСИ / перевождь / User / пользователь-редуктор js: 23: 39 23 | type Reducer = (состояние: состояние, действие: действие) => состояние; ^^^^^^ [1]

1 Ответ

0 голосов
/ 04 апреля 2020

Исходя из того, что опубликовано, может быть трудно диагностировать полную причину ошибки. Однако нужно проверить, что на основе этой строки

import type {SetUserAction} from "./user-actions"; // export type SetUserAction = (user: User) => Action;

вы определяете тип SetUserAction как функцию (возможно, создатель действия), а позже вы используете псевдоним Action как тип SetUserAction, что фактически означает, что параметр действия в вашем редукторе является функцией.

export type Action = SetUserAction;

Следовательно, когда вы включите action.type, произойдет ошибка типа, потому что нет свойства .type SetUserAction тип.

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

...