| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> JavaScript知识库 -> TypeScript基础之类型断言 -> 正文阅读 |
|
[JavaScript知识库]TypeScript基础之类型断言 |
前言文中内容基本上参考https://ts.xcatliu.com/basics/type-assertion.html 。 类型断言TypeScript中类型断言( 两种执行类型断言的方法:
基本使用
然而,当你在JSX中使用 常见的用途类型断言的常见用途有以下几种: 将任何一个类型断言为any当我们引用一个在某个对象上不存在的属性或方法时,就会报错:
以上错误提示显然是非常有用的, 但是有的时候,我们可以非常确定这段代码不会出错,比如在window全局对象上加上某个属性:
TypeScript编译时会提示
在 any 类型的变量上,访问任何属性都是允许的。
如以上代码中,虽然使用类型断言后能通过编译,但却无法避免运行时的错误。 其实我们可以拓展window的类型来解决这个错误:
只不过临时增加属性的话使用 将一个联合类型断言为其中一个类型当TypeScript不确定一个联合类型的变量到时是哪个类型的时候,我们只能访问此联合类型的所有类型中共有的属性或方法:
此时可以使用类型断言, 将animal断言为Fish,来解决这个问题:
将一个父类断言为更加具体的子类当类之间有继承关系时,类型断言也是很常见的:
以上代码中,我们声明了函数isApiError, 用来判断传入的参数是不是ApiError类型,它的参数类型肯定是比较抽象的父类Error。但是父类Error中没有code属性,如果直接获取
编译后的结果:
此时就只能使用类型断言,通过判断是否存在 code 属性,来判断传入的参数是不是 ApiError 了:
将any类型断言为一个具体类型比如有个函数,其返回值类型为any:
那么我们在使用它时,最好能够将调用来它之后的返回值断言成一个精确的类型,以免后续操作出现问题:
在调用完getCacheData之后,立即断言为Animal类型,后续对bird的访问时就有了代码补全,这样就提高了代码的可维护性。 类型断言的限制并不是任何一个类型都可以被断言为任何另一个类型。 先来看看TS中结构化类型系统的基本规则: 如果两个类型的结构一样,就说它们是互相兼容的,且可互相赋值(即如果类型
以上代码中, Fish包含了 Animal 中的所有属性,此外,还有一个方法eat, TS只会检查Fish是否能赋值给Animal,编译器检查Animal中的每个属性,看是否能在Fish中也找到对应属性。而并不关心 Cat 和 Animal 之间定义时是什么关系。
总结: 若 A 兼容 B,那么 A 能够被断言为 B,B 也能被断言为 A。 同理,若 B 兼容 A,那么 A 能够被断言为 B,B 也能被断言为 A。 双重断言使用
非空断言TypeScript2.0中提供的非空断言操作符(
具体可看之前的文章 TypeScript基础之非空断言操作符、可选链运算符、空值合并运算符 - 掘金 (juejin.cn) 以上ts代码均在 https://www.typescriptlang.org/play 上运行过,版本为4.7.2。 参考资料 |
|
JavaScript知识库 最新文章 |
ES6的相关知识点 |
react 函数式组件 & react其他一些总结 |
Vue基础超详细 |
前端JS也可以连点成线(Vue中运用 AntVG6) |
Vue事件处理的基本使用 |
Vue后台项目的记录 (一) |
前后端分离vue跨域,devServer配置proxy代理 |
TypeScript |
初识vuex |
vue项目安装包指令收集 |
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/23 16:35:29- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |