Модули vuex + typcript + namespace: доступ к другому состоянию модуля - PullRequest
0 голосов
/ 18 октября 2018

Я использую vuex с модулем машинописи и пространств имен.У меня 2 модуля: «UserProfile» и «Поездки».Все работает внутри одного модуля.

Мне нужно получить доступ к текущему пользователю, хранящемуся в состоянии модуля "UserProfile", изнутри действия модуля "Отключение".

Насколько я понимаюЯ мог бы использовать rootState ["profile / user"], если я не использую тип_скрипта.

Но с машинописью компилятор выдает мне такую ​​ошибку:

Element implicitly has an 'any' type because type 'RootState' has no index signature.

Это мое действие отМодуль «Отключение»:

async createTrip({ commit, state, rootState, rootGetters}) {
    const user = rootState["profile/user"];
}

Кто-нибудь знает правильный способ доступа к состоянию, принадлежащему другим пространствам имен, при использовании vuex + typcript?

Спасибо.

===== ОБНОВЛЕНИЕ =====

На данный момент единственное работающее решение, которое я нашел, это:

1] Для каждого модуля, создающего геттер, возвращающий все его состояние (то есть "Профиль""модуль добавляет метод получения, возвращающий тип ProfileState)

2] Использование этого метода получения через rootGetters из другого модуля, например:

 async createTrip({ commit, state, rootState, rootGetters}) {
    const profileState: ProfileState= rootGetters["profile/getState"];
    if(profileState.user === undefined ) return;
    console.log("CurrentUser: " + profileState.user.uid);
}

Ответы [ 2 ]

0 голосов
/ 18 марта 2019

Но с машинописью компилятор выдает мне такую ​​ошибку:

Element implicitly has an 'any' type because type 'RootState' has no index signature.

Эта ошибка гласит, что в объявлении типа вы пропустили добавление определения:

например:

export type RootState = {
  //...
  profile?: ProfileState
}

или

export type RootState = {
  //...
  [k in keyof ModuleStateTypes]?: ModuleStateTypes[k] 
}

Отображенные типы

0 голосов
/ 14 марта 2019

Просто идея, нельзя ли просто добавить эти модули в определение типа rootState?вот так:

{ ...; moduleName?: moduleState;}

или даже:

{ ...; [key: string | number]: any;}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...