доступен из всех компонентов?
К каждому компоненту подключаю так:
// lib.ts
export function Age(dateString: string): number{...}
// myComponent.vue
<script lang="ts">
import * as Lib from '@/scripts/lib';
...
Lib.Age(dateString);
import * as Lib from '@/scripts/lib'; Vue.prototype.$lib = Lib; ... this.$lib.Age(dateString); Я так делаю
Огромное спасибо, чудесно!
Пользуйтесь на здоровье)
А чем Vue.use не подошёл? Для чего расширять протипы или, того хуже, миксины использовать?
а внутри vue.use не миксины и прототипы?
так под капотом юза - расширение прототипа)
Насколько я поняла, он требует особой организации подключаемого файла
Да, Vue.use - это просто унифицированный способ подключать модули к Vue, которые внутри будут делать всё тоже самое
Ругается в компоненте: Property '$lib' does not exist on type 'CombinedVueInstance<Vue, {....
Особенности типизации тайпскрипта, полагаю. Тут я вам не помогу. Мои познания тайпскрипта - он существует)
В документации есть ответ - https://ru.vuejs.org/v2/guide/typescript.html#%D0%A0%D0%B0%D1%81%D1%88%D0%B8%D1%80%D0%B5%D0%BD%D0%B8%D0%B5-%D1%82%D0%B8%D0%BF%D0%BE%D0%B2-%D0%B4%D0%BB%D1%8F-%D0%B8%D1%81%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D1%8F-%D1%81-%D0%BF%D0%BB%D0%B0%D0%B3%D0%B8%D0%BD%D0%B0%D0%BC%D0%B8
Вдруг кому пригодится для подключения во Vue s TS: // lib.ts export function myFunc(q: string): string{ return "сорок два"; } // main.ts ... import * as lib from '@/scripts/lib'; declare module 'vue/types/vue' { interface Vue { $lib: any; // any тут не идеально, но ничего лучше не придумала, object оно не хочет } } Vue.prototype.$lib = lib; // где-то в компоненте const foo = this.$lib.myFunc("Why?");
Хорошая функция. Возвращает номер моей квартиры, а по совместительству - смысл жизни, вселенной... Ну ты понял)
А можно же оформить либу объектом, определить интерфейс, класс и всё такое и вместо any указать? Не силён в ТС, не кидайтесь тапками, если фигню несу)
Наверное можно, только я пока не умею ^_^
declare module 'vue/types/vue' { interface Vue { $lib: {myfunc: (q: string) => string;} // Вот так правильно типизировать ваш инжект } }
Wow! Спасибо огромное!
Но как быть если там десятки функций? Неудобно же.
Там смысл в том, что указывается не тип, а сам объект. Vue.prototype.$lib = Lib; в этом случае не нужно. В документации есть такой пример.
Не работает оно так: import * as slLibrary from '@/scripts/slLibrary'; declare module 'vue/types/vue' { interface Vue { $slLib: slLibrary; }} // Cannot use namespace 'slLibrary' as a type.
Обсуждают сегодня