博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
TypeScript基础入门 - 类型兼容性 - 泛型
阅读量:6860 次
发布时间:2019-06-26

本文共 1441 字,大约阅读时间需要 4 分钟。

hot3.png

转发

项目实践仓库

https://tag: 1.4.1

为了保证后面的学习演示需要安装下ts-node,这样后面的每个操作都能直接运行看到输出的结果。

npm install -D ts-node

后面自己在练习的时候可以这样使用

npx ts-node 脚本路径

泛型

因为TypeScript是结构性的类型系统,类型参数只影响使用其做为类型一部分的结果类型。比如,

interface Generics
{}let g1: Generics
=
>{};let g2: Generics
=
>{};g1 = g2;

上面代码里,g1和g2是兼容的,因为它们的结构使用类型参数时并没有什么不同。 把这个例子改变一下,增加一个成员,就能看出是如何工作的了:

interface Generics
{    data: T;}let g1: Generics
=
>{};let g2: Generics
=
>{};g1 = g2;

运行后会看到类似如下的输出

$ npx ts-node src/type_compatibility_3.ts⨯ Unable to compile TypeScript:src/type_compatibility_3.ts(8,1): error TS2322: Type 'Generics
' is not assignable to type 'Generics
'.  Type 'string' is not assignable to type 'number'.

在这里,泛型类型在使用时就好比不是一个泛型类型。对于没指定泛型类型的泛型参数时,会把所有泛型参数当成any比较。 然后用结果类型进行比较,如下例子。比如:

let t1 = function
(x: T): T {    // other ...}let t2 = function
(y: U): U {    // other ...}t1 = t2

如果有个类似如上的代码实例,是能否执行成功的,因为这里(x: any): any == (y: any): any

高级主题

子类型与赋值

目前为止,我们使用了兼容性,它在语言规范里没有定义。 在TypeScript里,有两种类型的兼容性:子类型与赋值。 它们的不同点在于,赋值扩展了子类型兼容,允许给 any赋值或从any取值和允许数字赋值给枚举类型或枚举类型赋值给数字。

语言里的不同地方分别使用了它们之中的机制。 实际上,类型兼容性是由赋值兼容性来控制的,即使在implements和extends语句也不例外。 更多信息,请参阅 []

本实例结束实践项目地址

https://tag: 1.4.2

转载于:https://my.oschina.net/zhangdapeng89/blog/2050741

你可能感兴趣的文章
Red hat linux 安装
查看>>
ubuntu samba服务器
查看>>
利用脚本在Virtualbox中部署fuel Openstack
查看>>
Jetty - 嵌入式运行Servlet
查看>>
同一个服务器安装两个tomcat
查看>>
链表的插入排序 Insertion Sort List
查看>>
我的友情链接
查看>>
曹丽丽:与百度互动必听--百度站长平台新动向
查看>>
BUG:由于代码已经过优化或者本机框架位于调用堆栈之上,无法计算表达式的值...
查看>>
fastDFS安装和使用
查看>>
Linux增加硬盘并挂载到VLM逻辑卷
查看>>
VMware Horizon View 7: Instant Clone Desktop Pool [Part 8]
查看>>
直接使用AD验证SSL ×××用户并且使用AD给用户添加banner
查看>>
学习从晚上十点开始
查看>>
怎样向azkaban贡献代码
查看>>
log4j日志写入redis扩展实现(log4j-redis-appender)
查看>>
我的友情链接
查看>>
Cobbler 安装及应用
查看>>
分享7个超实用的Emmet(zen coding)HTML代码使用技巧
查看>>
在windows server 2012 R2 hyper-v 上布署 Citrix XenDesktop 7.6 (前言)
查看>>