前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >什么是类型兼容?

什么是类型兼容?

作者头像
HelloWorldZ
发布于 2024-05-29 03:00:19
发布于 2024-05-29 03:00:19
13900
代码可运行
举报
文章被收录于专栏:前端开发前端开发
运行总次数:0
代码可运行

类型的兼容

TypeScript 的类型存在兼容关系,某些类型可以兼容其他类型。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
type T = number | string;

let a: number = 1;
let b: T = a;

上面示例中,变量a和b的类型是不一样的,但是变量a赋值给变量b并不会报错。这时,我们就认为,b的类型兼容a的类型。

TypeScript 为这种情况定义了一个专门术语。如果类型A的值可以赋值给类型B,那么类型A就称为类型B的子类型(subtype)。在上例中,类型number就是类型number|string的子类型。

TypeScript 的一个规则是,凡是可以使用父类型的地方,都可以使用子类型,但是反过来不行。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
let a: "hi" = "hi";
let b: string = "hello";

b = a; // 正确
a = b; // 报错

上面示例中,hi是string的子类型,string是hi的父类型。所以,变量a可以赋值给变量b,但是反过来就会报错。

之所以有这样的规则,是因为子类型继承了父类型的所有特征,所以可以用在父类型的场合。但是,子类型还可能有一些父类型没有的特征,所以父类型不能用在子类型的场合。

来源:

在这里插入图片描述
在这里插入图片描述
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2024-05-28,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Java泛型中的通配符 T,E,K,V,?,你确定都了解吗?
Java 泛型(generics)是 JDK 5 中引入的一个新特性, 泛型提供了编译时类型安全检测机制,该机制允许开发者在编译时检测到非法的类型。
用户5224393
2019/09/05
1.6K0
Java泛型中的通配符 T,E,K,V,?,你确定都了解吗?
【初学者笔记】🐯年要掌握 Typescript
JavaScript 是弱类型语言, 很多错误只有在运行时才会被发现,而 TypeScript 提供了一套静态检测机制, 可以帮助我们在编译时就发现错误。
一尾流莺
2022/12/10
1.3K0
【初学者笔记】🐯年要掌握 Typescript
深入类型系统_TypeScript笔记8
编译器能够根据变量初始值3推断出变量类型是number,因此多数场景下不必显式声明类型,它猜得到
ayqy贾杰
2019/06/12
1K0
深入类型系统_TypeScript笔记8
TS之类型断言
参考资料:https://ts.xcatliu.com/basics/type-assertion.html
Ashen
2020/07/02
1.3K0
深入 TypeScript 中的子类型,进阶 Vue3 源码前必须搞懂的。
TypeScript 中有很多地方涉及到子类型 subtype、父类型 supertype 的概念,如果搞不清这些概念,那么很可能被报错搞的无从下手,或者在写一些复杂类型的时候看到别人可以这么写,但是不知道为什么他可以生效。(就是我自己没错了)
ssh_晨曦时梦见兮
2020/10/26
1.1K1
不要混淆 typeof 的值运算和类型运算
JavaScript 语言中,typeof 运算符是一个一元运算符,返回一个字符串,代表操作数的类型。
HelloWorldZ
2024/05/29
1540
不要混淆 typeof 的值运算和类型运算
《现代Typescript高级教程》协变和逆变
在类型系统中,协变和逆变是对类型比较(类型兼容)一种形式化描述。在一些类型系统中,例如 Java,这些概念是显式嵌入到语言中的,例如使用extends关键字表示协变,使用super关键字表示逆变。在其他一些类型系统中,例如 TypeScript,协变和逆变的规则是隐式嵌入的,通过类型兼容性检查来实现。
linwu
2023/07/27
2260
你应该知道的TypeScript高级概念
来源 | https://juejin.cn/post/6897779423858737166
winty
2020/12/07
5310
深入 TypeScript 中的子类型、逆变、协变,进阶 Vue3 源码前必须搞懂的。
TypeScript 中有很多地方涉及到子类型 subtype、父类型 supertype、逆变和协变covariance and contravariance的概念,如果搞不清这些概念,那么很可能被报错搞的无从下手,或者在写一些复杂类型的时候看到别人可以这么写,但是不知道为什么他可以生效。(就是我自己没错了)
ssh_晨曦时梦见兮
2020/10/15
1.3K0
攀爬TS之路(五) 类型断言
但是,有时候我们就是需要访问非公有的属性或方法。比如上面的例子中,当是Fishman时,调用play方法,当是Worker时,调用eat方法。
赤蓝紫
2023/03/16
3570
攀爬TS之路(五)    类型断言
From Java To Kotlin 2:Kotlin 类型系统与泛型终于懂了
上期主要分享了 From Java To Kotlin 1 :空安全、扩展、函数、Lambda。
Seachal
2023/06/06
5490
From Java To Kotlin 2:Kotlin 类型系统与泛型终于懂了
快速理解 TypeScript 的逆变和协变
深入学习 TypeScript 类型系统的话,逆变、协变、双向协变、不变是绕不过去的概念。
神说要有光zxg
2022/06/06
1.8K1
快速理解 TypeScript 的逆变和协变
TypeScript 类型体操 - 原理
infer 的时候加上 extends 来约束推导的类型,这样推导出的就不再是 unknown 了,而是约束的类型。
Cellinlab
2023/05/17
4500
TypeScript 类型体操 - 原理
【万字长文】TypeScript入门指南
本文主要讲述叶秋学长通过一个月对TypeScript的学习整理出一份完整的入门指南,希望对正在学习前端的小伙伴有所帮助~
叶秋学长
2023/12/07
9100
【万字长文】TypeScript入门指南
TypeScript中那几个奇怪的知识点
此时res = 1会报错不能将类型“number”分配给类型“string[]”, 因为此时TS推断出来,res必定为一个数组,且里面的item是一个字符串.
Peter谭金杰
2021/03/04
1.2K0
Typescript常看常新
在看了同事推荐的ts教程后,发现自己还是有很多不会的,所以整理出一些自己学到的新知识点,希望各位也能有所收获!(我就写给自己看看,不要太当回事哈哈哈
y191024
2024/01/22
2990
Typescript常看常新
TypeScript基础(三)扩展类型-接口和类型兼容性
在TypeScript中,接口(Interface)用于定义对象的结构和类型。它是一种约定,用于描述对象应该具有哪些属性和方法。接口可以提高代码的可读性、可维护性和可重用性。
can4hou6joeng4
2023/11/17
4320
TypeScript基础常用知识点总结
虽然简介这一部分可能有人会觉得没必要,但是我觉得还是有必要简单的写一下的。我们以后既然要经常用它,当然得从认识它开始啦!不想看就往下滑咯。
害恶细君
2022/11/22
5.1K0
TypeScript基础常用知识点总结
TypeScript学习笔记(二)—— TypeScript基础
JavaScript 的类型分为两种:原始数据类型(Primitive data types)和对象类型(Object types)。
张果
2022/10/04
5.3K0
TypeScript学习笔记(二)—— TypeScript基础
TS内置类型与拓展
TypeScript具有类型系统,且是JavaScript的超集,其可以编译成普通的JavaScript代码,也就是说,其是带有类型检查的JavaScript。
WindRunnerMax
2022/05/06
1.2K0
相关推荐
Java泛型中的通配符 T,E,K,V,?,你确定都了解吗?
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验