diff --git a/flow/global-api.js b/flow/global-api.js index 0b2efb23ac3..eab244c22bb 100644 --- a/flow/global-api.js +++ b/flow/global-api.js @@ -8,8 +8,8 @@ declare interface GlobalAPI { set: <T>(target: Object | Array<T>, key: string | number, value: T) => T; delete: <T>(target: Object| Array<T>, key: string | number) => void; nextTick: (fn: Function, context?: Object) => void | Promise<*>; - use: (plugin: Function | Object) => void; - mixin: (mixin: Object) => void; + use: (plugin: Function | Object) => GlobalAPI; + mixin: (mixin: Object) => GlobalAPI; compile: (template: string) => { render: Function, staticRenderFns: Array<Function> }; directive: (id: string, def?: Function | Object) => Function | Object | void; diff --git a/test/unit/features/global-api/mixin.spec.js b/test/unit/features/global-api/mixin.spec.js index bcf962402c2..0b83773a5d4 100644 --- a/test/unit/features/global-api/mixin.spec.js +++ b/test/unit/features/global-api/mixin.spec.js @@ -162,4 +162,9 @@ describe('Global API: mixin', () => { expect(base).toHaveBeenCalled() expect(injected).toHaveBeenCalled() }) + + // #8595 + it('chain call', () => { + expect(Vue.mixin({})).toBe(Vue) + }) }) diff --git a/test/unit/features/global-api/use.spec.js b/test/unit/features/global-api/use.spec.js index 00053f808a7..d54ff0750f3 100644 --- a/test/unit/features/global-api/use.spec.js +++ b/test/unit/features/global-api/use.spec.js @@ -49,4 +49,9 @@ describe('Global API: use', () => { expect(Vue.options.directives['plugin-test']).toBeUndefined() expect(Ctor2.options.directives['plugin-test']).toBe(def) }) + + // #8595 + it('chain call', () => { + expect(Vue.use(() => {})).toBe(Vue) + }) }) diff --git a/types/test/vue-test.ts b/types/test/vue-test.ts index 031a909b67a..b03b227ffab 100644 --- a/types/test/vue-test.ts +++ b/types/test/vue-test.ts @@ -96,6 +96,15 @@ class Test extends Vue { this.use; this.mixin(Test); this.compile("<div>{{ message }}</div>"); + this + .use(() => { + + }) + .use(() => { + + }) + .mixin({}) + .mixin({}); } } diff --git a/types/vue.d.ts b/types/vue.d.ts index e1431453dd9..5a821ecd962 100644 --- a/types/vue.d.ts +++ b/types/vue.d.ts @@ -98,9 +98,9 @@ export interface VueConstructor<V extends Vue = Vue> { component<Data, Methods, Computed, Props>(id: string, definition?: ThisTypedComponentOptionsWithRecordProps<V, Data, Methods, Computed, Props>): ExtendedVue<V, Data, Methods, Computed, Props>; component(id: string, definition?: ComponentOptions<V>): ExtendedVue<V, {}, {}, {}, {}>; - use<T>(plugin: PluginObject<T> | PluginFunction<T>, options?: T): void; - use(plugin: PluginObject<any> | PluginFunction<any>, ...options: any[]): void; - mixin(mixin: VueConstructor | ComponentOptions<Vue>): void; + use<T>(plugin: PluginObject<T> | PluginFunction<T>, options?: T): this; + use(plugin: PluginObject<any> | PluginFunction<any>, ...options: any[]): this; + mixin(mixin: VueConstructor | ComponentOptions<Vue>): this; compile(template: string): { render(createElement: typeof Vue.prototype.$createElement): VNode; staticRenderFns: (() => VNode)[];