Avoid TS2571 when using $refs inside a template

37 Views Asked by At

Assuming SomeComp is a custom component exposing a function open, in a template I can do this:

    <button @click="$refs.someComp.open()">Open</button>
    <SomeComp ref="someComp" />

However when running type check, vue-tsc will fail with

TS2571: Object is of type 'unknown'

coplaining about the someComp ref. How do I resolve this? Can the type somehow be inferred or Do I have to declare it again? In a ref<>?

1

There are 1 best solutions below

0
On BEST ANSWER

Yes, you need to define is as a ref.

In script setup this would look like

<script setup lang="ts">
  import {ref} from 'vue'
  let someComp = ref<SomeComp>();
</script>
<template>
    <button @click="someComp.open()">Open</button>
    <SomeComp ref="someComp" />
</template>

Don't use $refs as it's untyped iirc