typescript 对于VUE3,类型“never”上的错误XX不存在是什么意思?

whhtz7ly  于 2023-11-20  发布在  TypeScript
关注(0)|答案(1)|浏览(190)

可以解释一下下面的错误吗?如果我使用ref(null),我会得到这个错误,但我没有得到任何东西。调用null并避免错误的正确方法是什么?

属性“scrollHeight”在类型“never”上不存在。
属性“clientHeight”在类型“never”上不存在。

const information = ref(null) // Throws error
const information = ref() // No error

function informationRefStatus() {
  const element = information.value
  isTextTruncated.value = element?.scrollHeight > element?.clientHeight
}

字符串

vlju58qv

vlju58qv1#

这是一个TypeScript错误,不是Vue特有的。如果你没有指定一个类型,它会根据初始值推断出来。

const information = ref()

字符串
这里的类型被推断为Ref<any>,其中any是一个类型,表明它可以是 * 任何值 *,TypeScript不会对其进行任何进一步的类型检查,因此您可以将内部ref值视为字符串或数字或HTML元素,TypeScript将其处理得很好。这就是为什么您没有错误。在声明为any之后,TypeScript基本上忽略了它。

const information = ref(null)


这意味着information总是期望有一个内部ref值nullnull从来没有有任何属性与它相关联,所以当你试图引用一个,如scrollHeight,它会导致你的错误。
当你使用TypeScript时,你同意遵守使用强类型语言的限制。类型化变量只能作为这些类型使用,以任何其他方式使用它们都会抛出错误。如果information是一个最初为null的HTML元素,那么你应该这样输入该变量

const information = ref<HTMLElement | null>(null)

function informationRefStatus() {
  if (information.value) { // check that information is not still null
    const element = information.value
    isTextTruncated.value = element.scrollHeight > element.clientHeight
  }
}

相关问题