能解释一下我在下面看到的错误吗?如果我使用ref(NULL),我会得到这个错误,但对于任何我不会得到的东西.调用NULL并避免错误的正确方法是什么?

Property 'scrollHeight' does not exist on type 'never'.

Property 'clientHeight' does not exist on type 'never'.

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


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

推荐答案

这是打字错误,不是Vue所特有的.如果不指定类型,则会根据初始值进行推断.

const information = ref()

这里的类型被推断为Ref<any>,其中any是一种类型,指示它可以是any value,并且TypeScrip不会对其进行任何进一步的类型判断,因此您可以将内部ref值视为字符串、数字或HTML元素,而TypeScrip将对其进行处理.这就是为什么你没有错的原因.在声明为any之后,TypeScrip基本上忽略它.

const information = ref(null)

这将推断类型为Ref<null>,这意味着information的内部引用值应始终为null.NULL never具有与之相关的任何属性,因此当您try 引用scrollHeight之类的属性时,会导致错误.

当您使用TypeScrip时,您同意遵循使用强类型语言的限制.类型化变量只能用作这些类型,以任何其他方式使用它们都会引发错误.如果information是一个初始为空的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
  }
}

Typescript相关问答推荐

如何使用属性作为具有Generics的TypScript类中的类型守护?

APP_INITIALIZER—TypeError:appInits不是函数

从typescript中的对象数组中获取对象的值作为类型'

具有动态键的泛型类型

material 表不渲染任何数据

类型脚本中没有接口的中间静态类

如何编写一个类型脚本函数,将一个对象映射(转换)为另一个对象并推断返回类型?

如何判断对象是否有重叠的叶子并产生有用的错误消息

如何使所有可选字段在打印脚本中都是必填字段,但不能多或少?

正交摄影机正在将渲染的场景切成两半

有没有办法防止类型交集绕过联合类型限制?

如何使这种一对一关系在旧表上起作用?

具有匹配功能的TS通用事件处理程序

顶点堆叠的图表条形图未在正确的x轴上显示

如何使用动态生成的键和值定义对象的形状?

Typescript 确保通用对象不包含属性

带有 Select 器和映射器的Typescript 泛型

如何确定单元格中的块对 mat-h​​eader-cell 的粘附(粘性)?

如何在 ngFor 循环中以Angular 正确动态渲染组件

通用可选函数参数返回类型