vue-class-components вещь клевая, безусловно. Но с синтаксисом может возникнуть путаница, да и у меня не завелось почему-то (я криворук немножечко, но сильно и не пытался). Первый гайд, естественно, обязателен к прочтению (там собственно этот vue-class-components и рекомендуется как один из вариантов), но гайд не исчерпывающий. Так просто связку vue-loader, ts-loader не заведешь, нужны изыски типа того, что я написал в комментарии под самим вопросом. А vue-cli template не использует vue-loader :)
Тем не менее отмечаю как решение, ибо лучшей информации в сети пока и нет.
Константин Китманов: Вот это я дал! Так погрузился в задачи, что забыл ответить. Извиняюсь, аж стыдно.
Нет не мое, я все еще продолжаю экспериментировать с архитектурой. Vuex довольно сложно типизировать, например. dispatch и commit принимают на вход :any и это, похоже, никак не обойти.
По большей части проблема с vue-loader решается тремя правками:
$ npm install vue-typescript-import-dts --save-dev
В tsconfig.json: compilerOptions.types = ["vue-typescript-import-dts"]
В вебпаке в конфиге ts-loader добавить options: {appendTsSuffixTo: [/\.vue$/]}.
Вот и все. Теперь можно безболезненно (почти) использовать TS в .vue компонентах. Главное, задавать экспортируемому компоненту тип:
Но вот при своеобразной архитектуре vue-приложений, типизировать его получается ой как плохо. Какие-то отдельные моменты можно, например actions в Vuex и methods, computed в vue. Но payload для mutations уже никак не проверишь. Приходится полагаться на свою собственную честность и пряморукость :)
В общем и целом, повторюсь, архитектуру я так и не доделал и продолжаю экспериментировать. Идеи есть в голове, но чтобы проверить их, нужно найти время на технические задачи.
Константин Китманов: Все еще обмазываюсь тайпскриптом, обмажусь до конца, потом запилю гайд. С VSCode, нагуглил, проблема не решаема. Но на гитхабе задача уже поставлена. В октябре. Всего их 3 635 на данный момент...
Константин Китманов: Нет, неправильно понял. VSCode ВООБЩЕ игнорирует любые декларации/описания интерфейсов в *.vue, даже если интерфейс описан в том же файле.
Константин Китманов: Судя по всему - я и покажу) Уже сделал связку vue-loader + typescript. Сейчас буду покрывать оставшееся. Единственная проблема на текущий момент - VSCode не хочет искать декларации типов внутри *.vue. Ну и, соответственно, автодополнение так себе. Но и это, я думаю, поправимо.
Александр: Во-первых - дурной тон, во-вторых можно по невнимательности затереть какое-нибудь свойство объекта windows. Так что лучше этого избегать, хотя в редких случаях и бывает полезно.
Александр: Значит функция была объявлена в другой области видимости. Вообще так не стоит делать. Лучше добавить функцию внутрь тега скрипт, вне других блоков. И обойтись тогда без window
Это, конечно, самый простой и очевидный вариант, но неправильный. Например нужно реализовать управление с клавиатуры - а это не так то просто. Поддержку optgroup, multiselect. Более того существует голосовое управление, хотя это, конечно, можно и опустить. Так что делов тут часов на 10, не меньше. Собственно, если нормально плагина до сих пор не существует, то я его реализую сам на досуге. Или форкну тот, что юзаю )
Тем не менее отмечаю как решение, ибо лучшей информации в сети пока и нет.