一个变量类型允许是多个类型,如果访问某个类型的属性,编辑器会直接提示错误

比如 变量 tuple 可能为string 或 number 类型,如果直接访问tuple.toFixed

const mixedTupleTypeArray: (string|number)[] = ['hello', 2333]
const tuple = mixedTupleTypeArray[0];
// tuple 类型有可能是 string 或 number
// 编辑器会提示错误,Property 'toFixed' does not exist on type 'string | number'
if(tuple.toFixed){ }

即使加?操作符也不行,还是会提示错误

tuple?.toFixed

解决方法: typeof 判断类型后再访问,如下所示

if(typeof tuple === 'number'){
tuple.toFixed
}
if(typeof tuple === 'string'){
tuple.substring
}

如果是 class 类相关的继承模式呢?

比如

class Animal{

}

class Dog extends Animal{
constructor(){
super();
}
speak(){
console.log('汪')
}
} const animal = new Animal();
const dog = new Dog(); const mixedClassTypeArray: (Animal|Dog)[] = [animal, dog];
const classItem = mixedClassTypeArray[0]
// 报错 Property 'speak' does not exist on type 'Animal | Dog'.
if(classItem.speak){ }

直接使用 classItem.speak 编辑器提示错误 Property 'speak' does not exist on type 'Animal | Dog'

两种写法可以解决

方法一

用 as 强行告诉编译器,classItem 属于 Dog 类

if((classItem as Dog)?.speak){

}

方法二

用 instanceof 判断实例化自哪里

if(classItem instanceof Dog){
classItem.speak
}

转载入注明博客园池中物 willian12345@126.com sheldon.wang

github: https://github.com/willian12345

typescript 解决变量多类型访问属性报错--工作随记的更多相关文章

  1. 打开sa属性报错

    --如果打开sa属性报错如下:无法显示请求的对话框.属性IsLocked不可用于“登录名sa".该对象可能没有此属性,也可能是访问权限不足而无法检索 --解决办法:首先用windows登录, ...

  2. hue中访问impala报错

    hue中访问impala报错:Could not connect to node03:21050 原因:impala服务未启动. 解决方法:在3个节点上都启动impala: 主节点node03启动以下 ...

  3. 痞子衡嵌入式:一个奇怪的Keil MDK下变量链接强制对齐报错问题(--legacyalign)

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家分享的是一个奇怪的Keil MDK下变量链接强制对齐报错问题. 痞子衡最近一直在参与恩智浦SBL项目(就是一个适用LPC和i.MXRT的完整OT ...

  4. 访问nginx报错502日志:failed (13: Permission denied) while connecting to upstream

    1.错误问题 nginx启动成功,但是访问nginx报错502.检查后台项目,使用IP+端口可以正常访问项目的,这说明项目启动成功了.那就是nginx的问题.检查了nginx.conf文件发现配置的反 ...

  5. 解决MyEclipse中的js报错的小方法

    今天,下了个模版,但是导进去的时候发现js会报错.看了下其他都没有错误.而有一个js报错误,请原谅我有点红色强迫症,不能留一点红色 . 错误如下:Syntax error on token " ...

  6. [转]解决IIS下UTF-8文件报错乱码的问题

    找了两天才找到解决办法…….晕晕晕...用第二种方法解决了. 网上找到的方法都没有写这一条 If objASPError.ASPDescription > "" Then 后 ...

  7. 【原创】大叔经验分享(49)hue访问hdfs报错/hue访问oozie editor页面卡住

    hue中使用hue用户(hue admin)访问hdfs报错: Cannot access: /. Note: you are a Hue admin but not a HDFS superuser ...

  8. Eclipse和MyEclipse使用技巧--解决MyEclipse中的js报错的小方法

    今天,下了个模版,但是导进去的时候发现js会报错.看了下其他都没有错误.而有一个js报错误,请原谅我有点红色强迫症,不能留一点红色 . 错误如下:Syntax error on token " ...

  9. 解决springMVC文件上传报错: The current request is not a multipart request

    转自:https://blog.csdn.net/HaHa_Sir/article/details/79131607 解决springMVC文件上传报错: The current request is ...

  10. 01-路由跳转 安装less this.$router.replace(path) 解决vue/cli3.0语法报错问题

    2==解决vue2.0里面控制台包的一些语法错误. https://www.jianshu.com/p/5e0a1541418b 在build==>webpack.base.conf.j下注释掉 ...

随机推荐

  1. 苹果iOS的应用移除主屏幕及恢复找回

    昨天刷到一个苹果iOS系统更换微信图标的,然后就添加了一个,发现那个记录通知数字问题,想恢复回来,所以就有了此文. https://www.cnblogs.com/lzhdim/p/17909867. ...

  2. 发布三个月跳水超1000!苹果M2版Mac mini降到3478元了

    快科技4月18日消息,苹果在今年1月17日晚,在官网上架了新款的Mac mini,搭载了M2芯片,起售价4499元. 当时该产品配合上教育优惠,一度被认为是"香爆了"的产品,如今距 ...

  3. CF1764H Doremy's Paint 2 题解

    题目链接:CF 或者 洛谷 高分题,感觉挺有意思的题,值得一提的是这个题的 \(1\) 和 \(3\) 版本却是两个基础题. 一开始以为跟这道差不多:P8512 [Ynoi Easy Round 20 ...

  4. 【奶奶看了都会】2分钟学会制作最近特火的ikun幻术图

    1.效果展示 最近ikun幻术图特别火啊,在网上能找到各种各样的ikun姿势图片,这些图片都是AI绘制的,能和风景完美融合在一起,今天小卷就来教大家怎么做这种图片 先看看图片效果 B站视频链接: 仿佛 ...

  5. Java并发(六)----线程start、run、state方法

    1.start 与 run 调用 run public static void main(String[] args) {    Thread t1 = new Thread("t1&quo ...

  6. 如何在Delphi TImageList 中使用 透明 png 图标

    Query: "Embarcadero Delphi ImageList does not show transparent PNG icons correctly. How to fix ...

  7. android架构组件Lifecycle

    Lifecycle 组件指的是 android.arch.lifecycle 包下提供的各种类与接口,可以让开发者构建能感知其他组件(主要指Activity .Fragment)生命周期(lifecy ...

  8. Linux进程通信 | 共享内存

    一.共享内存是什么 在Linux系统中,共享内存是一种IPC(进程间通信)方式,它可以让多个进程在物理内存中共享一段内存区域. 这种共享内存区域被映射到多个进程的虚拟地址空间中,使得多个进程可以直接访 ...

  9. 惠普HP519打印机缺色处理记录

    打印蓝色缺失, 黑色出墨不均匀 开盖检查, 发现蓝色墨水管路中间有断线, 拆开打印头后, 用随机器配的桔红色吸墨器吸墨. 之后重新开机还是缺色. 检查彩色打印头, 用浅浅的一层热水泡下方喷嘴, 黄色红 ...

  10. valueOf与toString

    valueOf与toString valueOf和toString是Object.prototype上的方法,在Js几乎所有的对象都会继承自Object,同样由于包装对象的原因,几乎所有的数据类型都能 ...