美文网首页
Typescript踩坑点

Typescript踩坑点

作者: 穆熙沐 | 来源:发表于2021-02-19 21:25 被阅读0次

1,类型断言
类型断言更像是类型的选择,而不是类型转换
举例:

// 函数的参数 val 是一个联合类型,在这里的意思是说 val 可以是字符串类型也可以是数值类型。
function func(val: string | number): number {
  if (val.length) {
    return val.length
  } else {
    return val.toString().length
  }
}

代码中要返回参数的长度,但是 length 可以是字符串的属性,而数值是没有这个属性的,所以当 val 是数值时,就先用 toSting() 来将数字转换为字符串再取长度。
这样的逻辑本身没问题,但是在编译阶段一访问 val.length 时就报错了,因为 访问联合类型值的属性时,这个属性必须是所有可能类型的共有属性,而length不是共有属性,val 的类型此时也没确定,所以编译不通过。为了通过编译,此时就可以使用类型断言了,如下:

function func(val: string | number): number {
  if ((val as string).length) {
    return (val as string).length
  } else {
    return val.toString().length
  }
}

把 val 断言为了 string类型,此时就可以访问 length 属性了。你可能会疑惑如果 val 断言为了string,那么开始定义的联合类型是不是失去了它的意义?答案是否定的。可以理解为在编译阶段强行把 val 当作 string类型来访问了。

相关文章

网友评论

      本文标题:Typescript踩坑点

      本文链接:https://www.haomeiwen.com/subject/krraxltx.html