Skip to content

Type checking failed with vue@2.7: Property 'flush' does not exist on type 'WatchOptions' #2232

Closed
vueuse/vue-demi
#245
@lsdsjy

Description

@lsdsjy
Contributor

Describe the bug

Running vue-tsc in a project with vue of version 2.7 would report errors like this:

node_modules/@vueuse/shared/index.d.ts:200:26 - error TS2339: Property 'flush' does not exist on type 'WatchOptions'.

200     flush?: WatchOptions['flush'];

It seems that vue 2.7 exports WatchOptions for Options API, not for Composition API:

// node_modules/vue/types/index.d.ts
export {
  ...
  WatchOptions,
  WatchOptionsWithHandler,
  DirectiveFunction,
  DirectiveOptions
} from './options'

which has no flush property.
A possible fix is to re-export WatchOptions from vue/types/v3-generated in vue-demi for v2.7 like:

// vue-demi/lib/v2.7/index.d.ts
export * from 'vue'
export type { WatchOptions } from 'vue/types/v3-generated'

@antfu Any thoughts?

Reproduction

https://stackblitz.com/edit/vitejs-vite-z2pxyv?file=src/a.ts

Run npx vue-tsc

System Info

@vueuse/core: ^9.2.0 => 9.2.0 
    vue: ^2.7.3 => 2.7.10 

on StackBlitz

Used Package Manager

npm

Validations

  • Follow our Code of Conduct
    Read the docs.
    Check that there isn't already an issue that reports the same bug to avoid creating a duplicate.
    Make sure this is a VueUse issue and not a framework-specific issue. For example, if it's a Vue SFC related bug, it should likely be reported to https://github.com/vuejs/core instead.
    Check that this is a concrete bug. For Q&A open a GitHub Discussion.
    The provided reproduction is a minimal reproducible example of the bug.

Activity

Holi0317

Holi0317 commented on Oct 25, 2022

@Holi0317
Contributor

Got same issue with vue 2.7.13.

I am working around this issue by as any the watch options which makes typescript happy.

I think this is issue with vue instead of demi coz the type exported in vue 2.7 is (somehow magically?) compatible with both v3 and v2. Should we open issue on vue repo?

vuthanhbayit

vuthanhbayit commented on Dec 1, 2022

@vuthanhbayit

same issue!

stale

stale commented on Jan 30, 2023

@stale

This issue has been automatically marked as stale because it has not had recent activity. It will be closed if no further activity occurs. Thank you for your contributions.

added and removed on Jan 30, 2023
Dmitry-zh

Dmitry-zh commented on Feb 13, 2023

@Dmitry-zh

Have same issue.
@lsdsjy thank you for solution

Temporary added patch:

diff --git a/node_modules/vue-demi/lib/index.d.ts b/node_modules/vue-demi/lib/index.d.ts
index 897b4c5..6cdfb78 100644
--- a/node_modules/vue-demi/lib/index.d.ts
+++ b/node_modules/vue-demi/lib/index.d.ts
@@ -18,6 +18,7 @@ declare const V: typeof Vue
 export declare type Plugin = PluginObject<any> | PluginFunction<any>
 export type { VNode } from 'vue'
 export * from 'vue'
+export type { WatchOptions } from 'vue/types/v3-generated'
 export { V as Vue, Vue2, isVue2, isVue3, version, install }

 // #region createApp polyfill

and added resolution in my package.json to freeze version:

"resolutions": {
        "vue-demi": "0.13.11"
    }

Hope this problem going to be solved asap

stale

stale commented on Apr 14, 2023

@stale

This issue has been automatically marked as stale because it has not had recent activity. It will be closed if no further activity occurs. Thank you for your contributions.

added and removed on Apr 14, 2023
stale

stale commented on Jun 13, 2023

@stale

This issue has been automatically marked as stale because it has not had recent activity. It will be closed if no further activity occurs. Thank you for your contributions.

added a commit that references this issue on Sep 20, 2023
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

      Development

      Participants

      @lsdsjy@Holi0317@vuthanhbayit@Dmitry-zh

      Issue actions

        Type checking failed with vue@2.7: Property 'flush' does not exist on type 'WatchOptions' · Issue #2232 · vueuse/vueuse