probil / vue-socket.io-extended

:v::zap: Socket.io bindings for Vue.js and Vuex (inspired by Vue-Socket.io)
MIT License
629 stars 38 forks source link

Please remove dependency on vue-class-component for Typescript users... #464

Open rfox12 opened 4 years ago

rfox12 commented 4 years ago

I love this library--it's been useful. Now that all my projects are Typescript I've noticed that this library is complaining that I need vue-class-component... but I don't need it for my setup (I use the new Vue Composition API).

It seems that index.d.ts uses VueDecorator in exactly one line. Is there any easy way to separate that out?

probil commented 4 years ago

Hi @rfox12 👋 Thanks for good words. I'm glad that library helps someone

Interesting claim I can tell you. 🤔 This is a bit strange because compiled library should not depend on vue-class-component anyhow. If you don't import Socket it should not bother you. But yeah, typescript sometimes is a bit "over-typed".

This is not the only issue I've got with the decorator. I had another problem with mixing default and named export which I thought was solved but it's not.

I guess it's time to move the decorator to a separate library. I think it will solve a bunch of problems. What do you think? I'm not sure just yet whether it's possible or not but I hope so ;)

BTW Are you using Vue 3 or just Composition API? Any ideas on how this library can benefit from composition API?

rfox12 commented 4 years ago

I'm using the Composition API as a plug-in for now (w/Vue 2.6). Vuex 4 just came out, but as far as I can tell you shouldn't really need to change anything with vue-socket.io-extended. More Typescript will continue to come to Vue now. When Vuex 5 hits you'll probably need to change some things around to keep the library going. I'll let you know if I run into issues.

rfox12 commented 4 years ago

Maybe you could move these lines out of index.d.ts and into a new socket.d.ts file?

import { VueDecorator } from 'vue-class-component';

export const Socket: (eventName?: string) => VueDecorator;
probil commented 4 years ago

I'm not sure whether typescript will start using that file socket.d.ts automatically or not 🤔 I suppose if I import socket.d.ts to index.d.ts the problem won't disappear. They only solution I see is an experiment

@rfox12 if I make a branch with a potential fix would you like to check it?

ChrisAgar commented 4 years ago

This is an issue for me as well. I installed the dependency as a workaround

guoxiangke commented 4 years ago

same error

probil commented 3 years ago

@rfox12 fixed in alpha of v5, but requires vue 3 for now. Will try to adopt it to work with v2 + composition api plugin https://github.com/probil/vue-socket.io-extended/tree/alpha