Browse Source

chore(types): compatible with TS 5.8 (#12973)

Yang Mingshan 7 months ago
parent
commit
4810f1489f

+ 31 - 0
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<Promise<void>>(nextTick())
+  expectType<Promise<string>>(nextTick(() => 'foo'))
+  expectType<Promise<string>>(nextTick(() => Promise.resolve('foo')))
+  expectType<Promise<string>>(
+    nextTick(() => Promise.resolve(Promise.resolve('foo'))),
+  )
+
+  expectType<void>(await nextTick())
+  expectType<string>(await nextTick(() => 'foo'))
+  expectType<string>(await nextTick(() => Promise.resolve('foo')))
+  expectType<string>(
+    await nextTick(() => Promise.resolve(Promise.resolve('foo'))),
+  )
+
+  nextTick().then(value => {
+    expectType<void>(value)
+  })
+  nextTick(() => 'foo').then(value => {
+    expectType<string>(value)
+  })
+  nextTick(() => Promise.resolve('foo')).then(value => {
+    expectType<string>(value)
+  })
+  nextTick(() => Promise.resolve(Promise.resolve('foo'))).then(value => {
+    expectType<string>(value)
+  })
+})

+ 1 - 1
packages/reactivity/src/ref.ts

@@ -275,7 +275,7 @@ export function proxyRefs<T extends object>(
   objectWithRefs: T,
 ): ShallowUnwrapRef<T> {
   return isReactive(objectWithRefs)
-    ? objectWithRefs
+    ? (objectWithRefs as ShallowUnwrapRef<T>)
     : new Proxy(objectWithRefs, shallowUnwrapHandlers)
 }
 

+ 8 - 3
packages/runtime-core/src/scheduler.ts

@@ -53,10 +53,15 @@ let currentFlushPromise: Promise<void> | null = null
 const RECURSION_LIMIT = 100
 type CountMap = Map<SchedulerJob, number>
 
-export function nextTick<T = void, R = void>(
+export function nextTick(): Promise<void>
+export function nextTick<T, R>(
   this: T,
-  fn?: (this: T) => R,
-): Promise<Awaited<R>> {
+  fn: (this: T) => R | Promise<R>,
+): Promise<R>
+export function nextTick<T, R>(
+  this: T,
+  fn?: (this: T) => R | Promise<R>,
+): Promise<void | R> {
   const p = currentFlushPromise || resolvedPromise
   return fn ? p.then(this ? fn.bind(this) : fn) : p
 }