Skip to content

Conversation

zhiyuanzmj
Copy link
Member

@zhiyuanzmj zhiyuanzmj commented Sep 22, 2025

Description

const Comp = (_, { expose = undefined! as { foo: Ref<number> } }) => {
  expose({
    foo: ref(1)
  })
}

export default () => {
  const compRef = useRef()
  expectType<number | null>(compRef.value.foo)
  return <Comp ref={compRef} />
}

Notice

Generic components don't support automatic inference of exposed types! it seems that only defineExpose can supported.

Linked Issues

Additional context

Copy link

Review PR in StackBlitz Codeflow Run & review this pull request in StackBlitz Codeflow.

Copy link

vercel bot commented Sep 22, 2025

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Preview Updated (UTC)
vue-macros Ready Ready Preview Sep 23, 2025 4:09am

@dosubot dosubot bot added size:S This PR changes 10-29 lines, ignoring generated files. volar labels Sep 22, 2025
@dosubot dosubot bot added size:M This PR changes 30-99 lines, ignoring generated files. and removed size:S This PR changes 10-29 lines, ignoring generated files. labels Sep 22, 2025
Copy link

pkg-pr-new bot commented Sep 22, 2025

Open in StackBlitz

@vue-macros/api

npm i https://pkg.pr.new/@vue-macros/api@997

@vue-macros/astro

npm i https://pkg.pr.new/@vue-macros/astro@997

@vue-macros/better-define

npm i https://pkg.pr.new/@vue-macros/better-define@997

@vue-macros/boolean-prop

npm i https://pkg.pr.new/@vue-macros/boolean-prop@997

@vue-macros/chain-call

npm i https://pkg.pr.new/@vue-macros/chain-call@997

@vue-macros/common

npm i https://pkg.pr.new/@vue-macros/common@997

@vue-macros/config

npm i https://pkg.pr.new/@vue-macros/config@997

@vue-macros/define-emit

npm i https://pkg.pr.new/@vue-macros/define-emit@997

@vue-macros/define-models

npm i https://pkg.pr.new/@vue-macros/define-models@997

unplugin-vue-define-options

npm i https://pkg.pr.new/unplugin-vue-define-options@997

@vue-macros/define-prop

npm i https://pkg.pr.new/@vue-macros/define-prop@997

@vue-macros/define-props

npm i https://pkg.pr.new/@vue-macros/define-props@997

@vue-macros/define-props-refs

npm i https://pkg.pr.new/@vue-macros/define-props-refs@997

@vue-macros/define-render

npm i https://pkg.pr.new/@vue-macros/define-render@997

@vue-macros/define-slots

npm i https://pkg.pr.new/@vue-macros/define-slots@997

@vue-macros/define-stylex

npm i https://pkg.pr.new/@vue-macros/define-stylex@997

@vue-macros/devtools

npm i https://pkg.pr.new/@vue-macros/devtools@997

@vue-macros/eslint-config

npm i https://pkg.pr.new/@vue-macros/eslint-config@997

@vue-macros/export-expose

npm i https://pkg.pr.new/@vue-macros/export-expose@997

@vue-macros/export-props

npm i https://pkg.pr.new/@vue-macros/export-props@997

@vue-macros/export-render

npm i https://pkg.pr.new/@vue-macros/export-render@997

@vue-macros/hoist-static

npm i https://pkg.pr.new/@vue-macros/hoist-static@997

@vue-macros/jsx-directive

npm i https://pkg.pr.new/@vue-macros/jsx-directive@997

vue-macros

npm i https://pkg.pr.new/vue-macros@997

@vue-macros/named-template

npm i https://pkg.pr.new/@vue-macros/named-template@997

@vue-macros/nuxt

npm i https://pkg.pr.new/@vue-macros/nuxt@997

@vue-macros/reactivity-transform

npm i https://pkg.pr.new/@vue-macros/reactivity-transform@997

@vue-macros/script-lang

npm i https://pkg.pr.new/@vue-macros/script-lang@997

@vue-macros/setup-block

npm i https://pkg.pr.new/@vue-macros/setup-block@997

@vue-macros/setup-component

npm i https://pkg.pr.new/@vue-macros/setup-component@997

@vue-macros/setup-sfc

npm i https://pkg.pr.new/@vue-macros/setup-sfc@997

@vue-macros/short-bind

npm i https://pkg.pr.new/@vue-macros/short-bind@997

@vue-macros/short-emits

npm i https://pkg.pr.new/@vue-macros/short-emits@997

@vue-macros/short-vmodel

npm i https://pkg.pr.new/@vue-macros/short-vmodel@997

@vue-macros/test-utils

npm i https://pkg.pr.new/@vue-macros/test-utils@997

@vue-macros/volar

npm i https://pkg.pr.new/@vue-macros/volar@997

commit: b838784

@zhiyuanzmj zhiyuanzmj changed the title fix(volar/jsx-directive): unwrap exposed for vapor functional components feat(volar/jsx-directive): support expose for vapor functional components Sep 22, 2025
@zhiyuanzmj zhiyuanzmj marked this pull request as ready for review September 22, 2025 14:59
@zhiyuanzmj zhiyuanzmj marked this pull request as draft September 22, 2025 15:16
@zhiyuanzmj zhiyuanzmj marked this pull request as ready for review September 23, 2025 11:57
@zhiyuanzmj zhiyuanzmj merged commit 8f876de into main Sep 23, 2025
11 checks passed
@zhiyuanzmj zhiyuanzmj deleted the refactor-exposed branch September 23, 2025 11:57
@dosubot dosubot bot added the enhancement New feature or request label Sep 23, 2025
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
enhancement New feature or request size:M This PR changes 30-99 lines, ignoring generated files. volar
Projects
None yet
Development

Successfully merging this pull request may close these issues.

1 participant