Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Vue Wait with Typescript #65

Open
fraparisi opened this issue Dec 21, 2018 · 23 comments
Open

Vue Wait with Typescript #65

fraparisi opened this issue Dec 21, 2018 · 23 comments

Comments

@fraparisi
Copy link
Contributor

fraparisi commented Dec 21, 2018

I think that in Readme should be present a section for using this plugin in typescript.
To add the property "wait" to new Vue({wait: new VueWait()}) you need to define a type definitions like the one attached, otherwise will be raised an error because the property does not exist.
vue-wait-property.d.ts.zip

@fraparisi fraparisi changed the title Vue Wait with Typescript in Readme Vue Wait with Typescript Dec 21, 2018
@fraparisi
Copy link
Contributor Author

Or better is possible to include it directly in the library itself.
Like vue-axios does.

@antoniogiroz
Copy link

Hi @fraparisi!

I've used the your .d.ts file, but Vue components (typescript class style) don't recognise this.$wait

How do you use $wait and others methods as waitFor?

Thanks!

@fraparisi
Copy link
Contributor Author

Hi @algil, for fix some error in ts compiler you can try using my solution for typings as here #64.
For $wait, u can place the file attached into your src and then in your main.ts use like this
new Vue({ wait : new VueWait({ useVuex: true, }), render: (h) => h(App), }).$mount('#app');

@antoniogiroz
Copy link

@fraparisi are you using a project generated with Vue Cli 3?

@fraparisi
Copy link
Contributor Author

fraparisi commented Mar 17, 2019 via email

@DavidLambauer
Copy link

Any update here? I would like to use the lib in my typescript classes to fix the missing async getter issue that typescript has.

Therefore I import waitFor like so

import { waitFor } from 'vue-wait';

Currently this import statement produces a typescript syntax error.

@fraparisi
Copy link
Contributor Author

fraparisi commented Apr 4, 2019 via email

@yoyoys
Copy link
Contributor

yoyoys commented Apr 5, 2019

@DavidLambauer For a workaround, you can install 1.3.2 version, and copy .d.ts file to your project. (I’ve put it on @/types/declare)
p.s. you need restart dev server to load your own declare file.

@antoniogiroz
Copy link

Hi, yes, vue project generated by vue cli 3.

Ok, @fraparisi, but then I have 2 d.ts files:

// shims-vue.d.ts
declare module '*.vue' {
  import Vue from 'vue';
  export default Vue;
}
// vue-wait.d.ts
import Vue from 'vue';
import VueWait from 'vue-wait';

declare module 'vue/types/vue' {
  interface VueConstructor {
    $wait: VueWait;
  }
}

declare module 'vue/types/options' {
  interface ComponentOptions<V extends Vue> {
    wait?: VueWait;
  }
}

With these files wait can be used in new Vue as a property:

// main.ts
new Vue({
  router,
  store,
  i18n,
  wait,
  render: h => h(App),
}).$mount('#app');

But not in a vue component:

created() {
    this.$wait.start('something'); // this shows an error in the editor
}

@DavidLambauer
Copy link

@yoyoys adding an additional definitions file is not what I want 🙄. I suppressed the warning for the moment. Hopefully, this can be fixed soon? Unfortunately, I don't feel that I could fix it on my own.

@f
Copy link
Owner

f commented Apr 11, 2019

I am not very into the TypeScript definition files, can someone add a section to the README or update the index.d.ts file? I can immediately release a new version.

@fraparisi
Copy link
Contributor Author

Hi, yes, vue project generated by vue cli 3.

Ok, @fraparisi, but then I have 2 d.ts files:

// shims-vue.d.ts
declare module '*.vue' {
  import Vue from 'vue';
  export default Vue;
}
// vue-wait.d.ts
import Vue from 'vue';
import VueWait from 'vue-wait';

declare module 'vue/types/vue' {
  interface VueConstructor {
    $wait: VueWait;
  }
}

declare module 'vue/types/options' {
  interface ComponentOptions<V extends Vue> {
    wait?: VueWait;
  }
}

With these files wait can be used in new Vue as a property:

// main.ts
new Vue({
  router,
  store,
  i18n,
  wait,
  render: h => h(App),
}).$mount('#app');

But not in a vue component:

created() {
    this.$wait.start('something'); // this shows an error in the editor
}

I've no problem using this.$wait, PhpStorm does not emit any error. Can u show me your tsconfig.json?

@fraparisi
Copy link
Contributor Author

file? I can immediat

I've already fix Type Description e fix the conflict in my Merge request, u can use that file.

@antoniogiroz
Copy link

@fraparisi These are my tsconfig files (I'm using a monorepo)

In the roor folder:

{
  "compilerOptions": {
    "target": "esnext",
    "module": "esnext",
    "strict": true,
    "importHelpers": true,
    "moduleResolution": "node",
    "experimentalDecorators": true,
    "esModuleInterop": true,
    "emitDecoratorMetadata": true,
    "allowSyntheticDefaultImports": true,
    "noImplicitAny": false,
    "sourceMap": true,
    "types": [
      "node",
      "jest",
      "webpack",
      "webpack-env"
    ],
    "lib": [
      "esnext",
      "dom",
      "dom.iterable",
      "scripthost"
    ]
  },
  "exclude": [
    "node_modules"
  ]
}

In my Vue app:

{
  "extends": "../../tsconfig.json",
  "compilerOptions": {
    "jsx": "preserve",
    "strictNullChecks": false,
    "baseUrl": ".",
    "paths": {
      "@/*": [
        "./src/*"
      ]
    }
  },
  "include": [
    "src/**/*.ts",
    "src/**/*.tsx",
    "src/**/*.vue",
    "tests/**/*.ts",
    "tests/**/*.tsx"
  ],
  "exclude": [
    "node_modules"
  ]
}

@fraparisi
Copy link
Contributor Author

fraparisi commented Apr 15, 2019

@algil This is mine:

{
    "compilerOptions": {
        "target": "esnext",
        "module": "esnext",
        "strict": true,
        "jsx": "preserve",
        "importHelpers": true,
        "moduleResolution": "node",
        "incremental": true,
        "esModuleInterop": true,
        "allowSyntheticDefaultImports": true,
        "sourceMap": true,
        "experimentalDecorators": true,
        "emitDecoratorMetadata": true,
        "noImplicitAny": true,
        "baseUrl": ".",
        "types": [
            "vuetify",
            "webpack",
            "webpack-env"
        ],
        "paths": {
            "@/*": [
                "src/*"
            ]
        },
        "lib": [
            "esnext",
            "dom",
            "dom.iterable",
            "scripthost"
        ]
    },
    "include": [
        "src/**/*.ts",
        "src/**/*.tsx",
        "src/**/*.vue",
        "tests/**/*.ts",
        "tests/**/*.tsx",
        "src/**/*.html"
    ],
    "exclude": [
        "node_modules"
    ]

and is all included in one point and I don't have the same error u have.
I use vue-wait like this:

import VueWait from 'vue-wait';
...
Vue.use(VueWait);
...
new Vue({
            router,
            store,
            i18n,
            wait  : new VueWait({
                                    useVuex: true,
                                }),
            render: (h) => h(App),
        }).$mount('#app');

@ArthurN
Copy link
Contributor

ArthurN commented Aug 9, 2019

@algil I changed VueConstructor to Vue in the vue-wait.d.ts sample code, and this seemed to work for me:

declare module 'vue/types/vue' {
  interface Vue {
    $wait: VueWait;
  }
}

This is how vuex does it.

@f
Copy link
Owner

f commented Aug 9, 2019 via email

@antoniogiroz
Copy link

@ArthurN That's great!

Thanks!

@Sunhat
Copy link

Sunhat commented Aug 2, 2020

I'm having issues with

import { waitFor } from 'vue-wait';

Any info on this?

Module '"node_modules/vue-wait"' has no exported member 'waitFor'. Did you mean to use 'import waitFor from "node_modules/vue-wait/src/types"' instead? ts(2614)

@butaosuinu
Copy link

I'm having same issue.

Probably because the waitFor type definition does not exist.

@axieum
Copy link

axieum commented Jan 16, 2021

@f, will vue-wait add TypeScript support soon?

image

Here's my tsconfig.json types:

"types": [
  "@types/node",
  "@nuxt/types",
  "@nuxtjs/axios",
  "@nuxtjs/auth-next",
  "@nuxtjs/moment",
  "vue-wait"
]

@ufhy
Copy link

ufhy commented Mar 10, 2021

i use this

// shims-vue.d.ts

import VueWait from 'vue-wait';

declare module 'vue/types/options' {
    export interface ComponentOptions<V extends Vue> {
        wait?: VueWait;
    }
}

declare module 'vue/types/vue' {
    export interface Vue {
        $wait: VueWait;
    }
}

@f
Copy link
Owner

f commented Mar 10, 2021

Can you open this as a PR?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

10 participants