From 3fdd1c424255f2839aa3b9caa347fe6aefd9a42d Mon Sep 17 00:00:00 2001 From: Yang Mingshan Date: Sun, 2 Mar 2025 00:00:15 +0800 Subject: [PATCH 1/3] types: compatible with TS 5.8 --- packages/compiler-core/src/transforms/vFor.ts | 2 +- packages/compiler-sfc/src/script/defineModel.ts | 2 +- packages/reactivity/src/ref.ts | 2 +- packages/runtime-core/src/scheduler.ts | 17 ++++++++++++----- 4 files changed, 15 insertions(+), 8 deletions(-) diff --git a/packages/compiler-core/src/transforms/vFor.ts b/packages/compiler-core/src/transforms/vFor.ts index 0dca0ba9a..a639caf2c 100644 --- a/packages/compiler-core/src/transforms/vFor.ts +++ b/packages/compiler-core/src/transforms/vFor.ts @@ -263,7 +263,7 @@ export function processFor( dir: DirectiveNode, context: TransformContext, processCodegen?: (forNode: ForNode) => (() => void) | undefined, -) { +): (() => void) | undefined { if (!dir.exp) { context.onError( createCompilerError(ErrorCodes.X_V_FOR_NO_EXPRESSION, dir.loc), diff --git a/packages/compiler-sfc/src/script/defineModel.ts b/packages/compiler-sfc/src/script/defineModel.ts index 050828002..a0b5e11fe 100644 --- a/packages/compiler-sfc/src/script/defineModel.ts +++ b/packages/compiler-sfc/src/script/defineModel.ts @@ -114,7 +114,7 @@ export function processDefineModel( return true } -export function genModelProps(ctx: ScriptCompileContext) { +export function genModelProps(ctx: ScriptCompileContext): string | undefined { if (!ctx.hasDefineModelCall) return const isProd = !!ctx.options.isProd diff --git a/packages/reactivity/src/ref.ts b/packages/reactivity/src/ref.ts index 6b8d54181..b47a4cac0 100644 --- a/packages/reactivity/src/ref.ts +++ b/packages/reactivity/src/ref.ts @@ -275,7 +275,7 @@ export function proxyRefs( objectWithRefs: T, ): ShallowUnwrapRef { return isReactive(objectWithRefs) - ? objectWithRefs + ? (objectWithRefs as any) : new Proxy(objectWithRefs, shallowUnwrapHandlers) } diff --git a/packages/runtime-core/src/scheduler.ts b/packages/runtime-core/src/scheduler.ts index b40c31d39..dcdd81bc4 100644 --- a/packages/runtime-core/src/scheduler.ts +++ b/packages/runtime-core/src/scheduler.ts @@ -47,16 +47,21 @@ const pendingPostFlushCbs: SchedulerJob[] = [] let activePostFlushCbs: SchedulerJob[] | null = null let postFlushIndex = 0 -const resolvedPromise = /*@__PURE__*/ Promise.resolve() as Promise +const resolvedPromise = /*@__PURE__*/ Promise.resolve() let currentFlushPromise: Promise | null = null const RECURSION_LIMIT = 100 type CountMap = Map -export function nextTick( +export function nextTick(): Promise +export function nextTick( this: T, - fn?: (this: T) => R, -): Promise> { + fn: (this: T) => R | Promise, +): Promise +export function nextTick( + this: T, + fn?: (this: T) => R | Promise, +): Promise { const p = currentFlushPromise || resolvedPromise return fn ? p.then(this ? fn.bind(this) : fn) : p } @@ -113,7 +118,9 @@ export function queueJob(job: SchedulerJob): void { function queueFlush() { if (!currentFlushPromise) { - currentFlushPromise = resolvedPromise.then(flushJobs) + currentFlushPromise = resolvedPromise.then(() => { + flushJobs() + }) } } From 139a4d42f953758c805202fd92f7e56e608654fc Mon Sep 17 00:00:00 2001 From: Yang Mingshan Date: Mon, 3 Mar 2025 13:43:14 +0800 Subject: [PATCH 2/3] types: undo unnecessary changes --- packages/runtime-core/src/scheduler.ts | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/packages/runtime-core/src/scheduler.ts b/packages/runtime-core/src/scheduler.ts index dcdd81bc4..af6752078 100644 --- a/packages/runtime-core/src/scheduler.ts +++ b/packages/runtime-core/src/scheduler.ts @@ -47,7 +47,7 @@ const pendingPostFlushCbs: SchedulerJob[] = [] let activePostFlushCbs: SchedulerJob[] | null = null let postFlushIndex = 0 -const resolvedPromise = /*@__PURE__*/ Promise.resolve() +const resolvedPromise = /*@__PURE__*/ Promise.resolve() as Promise let currentFlushPromise: Promise | null = null const RECURSION_LIMIT = 100 @@ -118,9 +118,7 @@ export function queueJob(job: SchedulerJob): void { function queueFlush() { if (!currentFlushPromise) { - currentFlushPromise = resolvedPromise.then(() => { - flushJobs() - }) + currentFlushPromise = resolvedPromise.then(flushJobs) } } From 1a7010468ce20999f1a4cca2b1f12e3332020c7a Mon Sep 17 00:00:00 2001 From: Yang Mingshan Date: Mon, 3 Mar 2025 14:14:53 +0800 Subject: [PATCH 3/3] types: add type tests for nextTick --- packages-private/dts-test/scheduler.test-d.ts | 31 +++++++++++++++++++ 1 file changed, 31 insertions(+) create mode 100644 packages-private/dts-test/scheduler.test-d.ts diff --git a/packages-private/dts-test/scheduler.test-d.ts b/packages-private/dts-test/scheduler.test-d.ts new file mode 100644 index 000000000..26702432b --- /dev/null +++ b/packages-private/dts-test/scheduler.test-d.ts @@ -0,0 +1,31 @@ +import { nextTick } from 'vue' +import { describe, expectType } from './utils' + +describe('nextTick', async () => { + expectType>(nextTick()) + expectType>(nextTick(() => 'foo')) + expectType>(nextTick(() => Promise.resolve('foo'))) + expectType>( + nextTick(() => Promise.resolve(Promise.resolve('foo'))), + ) + + expectType(await nextTick()) + expectType(await nextTick(() => 'foo')) + expectType(await nextTick(() => Promise.resolve('foo'))) + expectType( + await nextTick(() => Promise.resolve(Promise.resolve('foo'))), + ) + + nextTick().then(value => { + expectType(value) + }) + nextTick(() => 'foo').then(value => { + expectType(value) + }) + nextTick(() => Promise.resolve('foo')).then(value => { + expectType(value) + }) + nextTick(() => Promise.resolve(Promise.resolve('foo'))).then(value => { + expectType(value) + }) +})