可以解释一下下面的错误吗?如果我使用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
}
字符串
1条答案
按热度按时间vlju58qv1#
这是一个TypeScript错误,不是Vue特有的。如果你没有指定一个类型,它会根据初始值推断出来。
字符串
这里的类型被推断为
Ref<any>
,其中any是一个类型,表明它可以是 * 任何值 *,TypeScript不会对其进行任何进一步的类型检查,因此您可以将内部ref值视为字符串或数字或HTML元素,TypeScript将其处理得很好。这就是为什么您没有错误。在声明为any
之后,TypeScript基本上忽略了它。型
这意味着
information
总是期望有一个内部ref值null
。null
从来没有有任何属性与它相关联,所以当你试图引用一个,如scrollHeight
,它会导致你的错误。当你使用TypeScript时,你同意遵守使用强类型语言的限制。类型化变量只能作为这些类型使用,以任何其他方式使用它们都会抛出错误。如果
information
是一个最初为null的HTML元素,那么你应该这样输入该变量型