Ввод Vuex 4 С Помощью Typescript Для Vue 3

Так получилось, что я начал изучать Vue месяц назад с версии Vue 3. Ранее было заявлено, что Vue 3 был переписан на машинописном языке.

Честно говоря, я ожидал того же самого от новой версии Vuex 4 для Vue 3. Но почему-то все получилось не так, как ожидалось.

Посмотрев репозиторий Vuex 4 https://github.com/vuejs/vuex/tree/4.0 Мы вдруг увидим, что он написан на js и в самом конце написаны типы для готового кода.

С одной стороны, нам, как пользователям, все равно, как написан код — главное, чтобы им было удобно пользоваться.

И вот тут-то начинающий пользователь сразу попадает в странную ситуацию при попытке использовать машинопись для управления типами создаваемых объектов магазина.

Дело в том, что типизация созданного хранилища во Vuex 4 полностью отсутствует. Ну да ладно, подумал я и начал искать решение.

VUE 2 предлагает элегантные решения на основе декоратора, например это .

Если мы посмотрим исходный код проекта, то увидим, что он был разработан для "vue": "> =2" и "vuex": "3" Использование декораторов во Vue 3 основано на библиотеке компонент vue-класса , документация по которому на данный момент даже не выпущена.

Таким образом, использование декораторов для набора текста Vuex 4 для Vue 3 на мой взгляд на данный момент выглядит сложной затеей и я решил отказаться от использования декораторов для набора текста.

Решение, которое я предлагаю, основано на на проекте И статья .

Метод, предложенный Андреем, на мой взгляд, требует большого количества дополнительного кода и на основе его кода я реализовал свое решение.



Основные моменты

Я решил сделать магазин «одним целым», но разделить на файлы по общим функциям.

Соответственно, в разных файлах модулей я предлагаю добавлять к сущностям специальные префиксы.

Например, для той части магазина, которая реализует авторизацию — auth.ts, ко всем функциям можно добавить префикс auth. Согласен, что в таком подходе есть некоторое неудобство — а именно, контроль уникальности имен ложится на разработчика (но если вы допустите ошибку, машинописный компилятор вам все подскажет).

Это решение было принято потому, что я не смог описать стандартную концепцию модулей Vuex. Основная идея состоит в том, чтобы создать новые типы из типов Vuex с помощью Omit и переписать существующие типы Vuex для мутаций, действий и геттеров.

В репозитории находится основной файл магазина — index.ts и файлы плагинов (не модулей Vuex в стандартном понимании), в которых разрабатывается некоторая своя логика (в примере счетчик и аутентификация).

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

Ввод текста основан на машинописном тексте 4 — функции именованных кортежей.

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

Зависимости

Мой проект компилируется только в среде typescript 4 — взгляните на ваш package.json. При создании проекта с использованием vue-cli по умолчанию устанавливается typescript версии 3. Вам нужно либо использовать утилита ncu или самостоятельно заменить версию в package.json на > 4.0 (на момент написания последней версией машинописи была 4.1.3).

И, конечно же, не забудьте удалить файл package-lock.json и запустить команду установки npm.

Как использовать

Скачать проект .

В каталоге src вы найдете папку магазина — скопируйте ее в свой проект. Убедитесь, что в вашем проекте установлена версия машинописного текста > = 4. В файле InitialState.ts введите начальные значения — они же являются типами для состояния.

Для нормальной типизации состояния следует учитывать, что используется способность машинописного текста выводить типы из значений.

Например, если вы хотите использовать массив и начальное значение для него планируется пустым, то напишите его так — на примере пользователей:

   

export const initialState = { counter: { counter: 0, }, auth: { name: "Ivan", idUser: "89annsdj77", email: "[email protected]", users:[] as Array<string> }, };

В основном файле - index.ts подключайте свои модули по приведенному примеру - после строки "код без изменений" идет часть кода, которую нельзя изменить.

В папке модулей создайте нужные вам файлы — модули с вашей логикой (это не модули Vuex — они просто делят вашу логику на группы).

Внутри каждого модуля есть неизменяемый фрагмент кода (шаблон), который всегда должен быть рядом.

Этот шаблон начинается со строки «Действия без кода изменения» и продолжается до конца модуля.

Далее в каждом модуле необходимо описать типы Getters, ActionsPayload, MutationPayload по шаблонам, приведенным в файле counter.ts. Также необходимо реализовать и экспортировать сам функционал мутаций, геттеров, действий действий.

Пример использования магазина был приведен в компоненте HelloWorld. P.S. Буду рад, если вы поставите моему проекту звездочку на github. Теги: #vue.js #vue #vuex

Вместе с данным постом часто просматривают:

Автор Статьи


Зарегистрирован: 2019-12-10 15:07:06
Баллов опыта: 0
Всего постов на сайте: 0
Всего комментарий на сайте: 0
Dima Manisha

Dima Manisha

Эксперт Wmlog. Профессиональный веб-мастер, SEO-специалист, дизайнер, маркетолог и интернет-предприниматель.