When returning a deferred promise from the route loader() the promise isn't actually deferred, but it seems awaited. This can be seen on the resolved type depending on whether the defer() value was returned directly vs. when it's wrapped inside an object.
This works:
loader: () => {
return {
deferredPromise: defer(new Promise<string>(() => {})),
}
}
const data = Route.useLoaderData() // β type for `data.deferredPromise` is correctly `DeferredPromise<string>`
This does not work:
loader: () => {
return defer(new Promise<string>(() => {}))
}
const deferredPromise = Route.useLoaderData() // β type for `deferredPromise` is unexpectedly `string` instead of `DeferredPromise<string>`
Observe the difference between the types from Route.useLoaderData() depending on whether a defer(...) value is returned directly vs. when it's wrapped in an object, e.g. { deferredPromise: defer(...) }
Expected behavior
I expect the loaderData value for the defer(...) value to always be a DeferredPromise<>, not the value of said DeferredPromise.
Describe the bug
When returning a deferred promise from the route
loader()
the promise isn't actually deferred, but it seems awaited. This can be seen on the resolved type depending on whether thedefer()
value was returned directly vs. when it's wrapped inside an object.This works:
This does not work:
Your Example Website or App
https://stackblitz.com/edit/tanstack-router-hbzw42?file=src%2Froutes%2Fposts.%24postId.tsx
Steps to Reproduce the Bug or Issue
routes/posts/posts.$postId.tsx
fileRoute.useLoaderData()
depending on whether adefer(...)
value is returned directly vs. when it's wrapped in an object, e.g.{ deferredPromise: defer(...) }
Expected behavior
I expect the loaderData value for the
defer(...)
value to always be aDeferredPromise<>
, not the value of said DeferredPromise.Screenshots or Videos
Platform
Additional context
No response