feat(types): add type TemplateRef (#12645)

* feat(types): add type TemplateRef

* chore: simplify

Co-authored-by: jh-leong <jh.leong@outlook.com>

---------

Co-authored-by: jh-leong <jh.leong@outlook.com>
This commit is contained in:
Shinigami 2025-03-14 01:17:49 +01:00 committed by GitHub
parent d48937fb95
commit 636a8619f0
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
3 changed files with 7 additions and 4 deletions

View File

@ -4,6 +4,7 @@ import {
type MaybeRefOrGetter, type MaybeRefOrGetter,
type Ref, type Ref,
type ShallowRef, type ShallowRef,
type TemplateRef,
type ToRefs, type ToRefs,
type WritableComputedRef, type WritableComputedRef,
computed, computed,
@ -535,7 +536,7 @@ expectType<string>(toValue(unref2))
// useTemplateRef // useTemplateRef
const tRef = useTemplateRef('foo') const tRef = useTemplateRef('foo')
expectType<Readonly<ShallowRef<unknown>>>(tRef) expectType<TemplateRef>(tRef)
const tRef2 = useTemplateRef<HTMLElement>('bar') const tRef2 = useTemplateRef<HTMLElement>('bar')
expectType<Readonly<ShallowRef<HTMLElement | null>>>(tRef2) expectType<TemplateRef<HTMLElement>>(tRef2)

View File

@ -5,9 +5,11 @@ import { EMPTY_OBJ } from '@vue/shared'
export const knownTemplateRefs: WeakSet<ShallowRef> = new WeakSet() export const knownTemplateRefs: WeakSet<ShallowRef> = new WeakSet()
export type TemplateRef<T = unknown> = Readonly<ShallowRef<T | null>>
export function useTemplateRef<T = unknown, Keys extends string = string>( export function useTemplateRef<T = unknown, Keys extends string = string>(
key: Keys, key: Keys,
): Readonly<ShallowRef<T | null>> { ): TemplateRef<T> {
const i = getCurrentInstance() const i = getCurrentInstance()
const r = shallowRef(null) const r = shallowRef(null)
if (i) { if (i) {

View File

@ -64,7 +64,7 @@ export { defineComponent } from './apiDefineComponent'
export { defineAsyncComponent } from './apiAsyncComponent' export { defineAsyncComponent } from './apiAsyncComponent'
export { useAttrs, useSlots } from './apiSetupHelpers' export { useAttrs, useSlots } from './apiSetupHelpers'
export { useModel } from './helpers/useModel' export { useModel } from './helpers/useModel'
export { useTemplateRef } from './helpers/useTemplateRef' export { useTemplateRef, type TemplateRef } from './helpers/useTemplateRef'
export { useId } from './helpers/useId' export { useId } from './helpers/useId'
export { export {
hydrateOnIdle, hydrateOnIdle,