Vue Composition API - 使用 TypeScript 获取引用
Vue Composition API - getting a ref using TypeScript
Vetur 在下面的这一行中为 null 添加了下划线:
const firstRef = ref<HTMLElement>(null)
No overload matches this call.
Overload 1 of 3, '(raw: HTMLElement): Ref', gave the following error.
Argument of type 'null' is not assignable to parameter of type 'HTMLElement'.
Overload 2 of 3, '(raw: HTMLElement): Ref', gave the following error.
Argument of type 'null' is not assignable to parameter of type 'HTMLElement'.Vetur(2769)
这里是一个浓缩的上下文。知道我做错了什么吗?
<template>
<input id="first" ref="firstRef">
<button type="button" @click.prevent="focusFirst">Focus</button>
</template>
<script lang="ts">
import { defineComponent, ref } from "@vue/composition-api"
export default defineComponent({
name: "Test",
setup() {
const firstRef = ref<HTMLElement>(null)
const focusFirst = () => {
const theField = firstRef.value
theField.focus()
}
return { focusFirst }
}
</script>
正如 Vetur 所反馈的那样,您不能将 null
类型转换为 HTMLELement
类型。解决此问题的一种可能方法是编写:
const firstRef = ref<HTMLElement | null>(null)
但是,请记住,每次要使用 firstRef 时都必须检查其类型是否为 null
。你也可以这样做:
if (firstRef.value) {
// do stuff with firstRef
// typescript knows that it must be of type HTMLElement here.
}
另一种方法可能是可选链接(自 TS 3.7 起):
firstRef.value?.focus()
这对 TS 没问题,只有当 firstRef.value
不为 null 或未定义时才执行命令。
Vetur 在下面的这一行中为 null 添加了下划线:
const firstRef = ref<HTMLElement>(null)
No overload matches this call. Overload 1 of 3, '(raw: HTMLElement): Ref', gave the following error. Argument of type 'null' is not assignable to parameter of type 'HTMLElement'. Overload 2 of 3, '(raw: HTMLElement): Ref', gave the following error. Argument of type 'null' is not assignable to parameter of type 'HTMLElement'.Vetur(2769)
这里是一个浓缩的上下文。知道我做错了什么吗?
<template>
<input id="first" ref="firstRef">
<button type="button" @click.prevent="focusFirst">Focus</button>
</template>
<script lang="ts">
import { defineComponent, ref } from "@vue/composition-api"
export default defineComponent({
name: "Test",
setup() {
const firstRef = ref<HTMLElement>(null)
const focusFirst = () => {
const theField = firstRef.value
theField.focus()
}
return { focusFirst }
}
</script>
正如 Vetur 所反馈的那样,您不能将 null
类型转换为 HTMLELement
类型。解决此问题的一种可能方法是编写:
const firstRef = ref<HTMLElement | null>(null)
但是,请记住,每次要使用 firstRef 时都必须检查其类型是否为 null
。你也可以这样做:
if (firstRef.value) {
// do stuff with firstRef
// typescript knows that it must be of type HTMLElement here.
}
另一种方法可能是可选链接(自 TS 3.7 起):
firstRef.value?.focus()
这对 TS 没问题,只有当 firstRef.value
不为 null 或未定义时才执行命令。