Аргументы действия Redux-toolkit в WebStorm

Я начал использовать набор инструментов redux, но когда я пытаюсь отправить действие с аргументами, я получаю предупреждение от IDE:

Тип аргумента {...} нельзя присвоить типу параметра {payload: {...}}
 Тип аргумента {...} не может быть назначен типу параметра {payload: {...}}

или Недействительное количество аргументов, ожидаемое 2
 Недопустимое количество аргументов, ожидается 2

Думаю, он считает, что государство должно быть первым аргументом.

Есть способ исправить это?

РЕДАКТИРОВАТЬ: я нашел временное решение этой конкретной проблемы. По сути, я переместил эти действия из файла.

Если бы раньше у меня было:

// reducer.js
const state = createSlice({
  // ...
  reducers: {
    handleNumber(state, action){}
  }
})

export const { handleNumber } = state.actions
export default state.reduer

Теперь у меня есть:

// reducer.js
export const state = createSlice({
  // ...
  reducers: {
    handleNumber(state, action){}
  }
})

export default state.reducer
// actions.js
import { state } from './reducer'

export const { handleNumber } = state.actions

Как сказано в комментарии. Webstorm, похоже, подбирает материал для сопоставления с образцом, если эти имена находятся в одном файле. Но если они находятся в отдельных файлах, он просматривает определение машинописного текста.

Но возникает другая проблема: теперь, когда я нажимаю Ctrl + щелчок по имени функции в actions.js, вместо перехода к функции он переходит к объявлению типа.


person Andrei Sirotin    schedule 21.10.2020    source источник


Ответы (2)


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

person phry    schedule 21.10.2020
comment
вот репо, я также добавил картинку в папку с активами. github.com/andrei9669/redux-toolkit-webstorm - person Andrei Sirotin; 22.10.2020
comment
Понятно. В отличие от VSCode, который будет использовать компилятор TypeScript в фоновом режиме для определения типов методов, даже когда вы пишете JavaScript, WebStorm, похоже, просто сопоставляет материал по шаблону по имени. И тогда он не знает внутреннего устройства, а просто догадывается, что setNumberA соответствует определению редуктора, что, очевидно, неверно. Мне жаль это говорить, но в данном случае это просто инструменты, которые уступают. Ничего не могу с этим поделать :( - person phry; 22.10.2020
comment
похоже, проблема возникла некоторое время. youtrack.jetbrains.com/issue/WEB-42559 - person Andrei Sirotin; 23.10.2020

У меня была аналогичная проблема, я не уверен, что вызывает проблему, но я обнаружил, что удаление / переименование вашей (скрытой) папки .idea полезно. После этого перезапустите Webstorm, и он должен создать новую .idea папку, которая работает.

Таким образом, проблема, похоже, заключается в настройках по умолчанию Webstorm IDEA, которые вызывают эту проблему. Обязательно сначала переименуйте папку .idea, если вы не уверены, хотите ли вы сохранить некоторые настройки.

Надеюсь, это сработает!

person CodeBro    schedule 11.01.2021