接口 vs 类型别名
类型别名会给一个类型起个新名字。类型别名有时和接口很像,但是可以作用于原始值,联合类型,元组以及其它任何你需要手写的类型。
type Name = string;
type NameResolver = () => string;
type NameOrResolver = Name | NameResolver;
function getName(n: NameOrResolver): Name {if (typeof n === 'string') {return n;}else {return n();}
}
起别名不会新建一个类型,只是创建了一个新名字来引用那个类型。给原始类型起别名通常没什么用,只是一种使用形式。
同接口一样,类型别名也可以是泛型,我们可以添加类型参数并且在别名声明的右侧传入:
type Container<T> = { value: T };
我们也可以使用类型别名来在属性里引用自己:
type Tree<T> = {value: T;left: Tree<T>;right: Tree<T>;
}
然而,类型别名不能出现在声明右侧的任何地方。
type Yikes = Array<Yikes>; // error
像我们提到的,类型别名可以像接口一样;然而,仍有一些细微差别。
另一个重要区别是类型别名不能被 extends 和 implements(自己也不能 extends 和 implements 其它类型)。因为 软件中的对象应该对于扩展是开放的,但是对于修改是封闭的,你应该尽量去使用接口代替类型别名。
字符串字面量类型允许你指定字符串必须的固定值。在实际应用中,字符串字面量类型可以与联合类型,类型保护和类型别名很好的配合。通过结合使用这些特性,你可以实现类似枚举类型的字符串。
type Easing = "ease-in" | "ease-out" | "ease-in-out"
接口 vs 类型别名相关推荐
- 接口 索引签名 接口与类型别名的异同 接口的继承 函数接口
接口的基本使用 (接口也是一种数据类型) 接口是一种抽象方法的声明,是一些方法特征的集合,这些方法都应该是抽象的,需要具体的类去实现,然后第三方就可以同这组抽象方法调用,让具体的类执行具体的方法 e ...
- TypeScript中的联合类型、类型别名、接口、类型断言
一.联合类型 在TypeScript中,联合类型(Union Types)是指用"|"符号将多个类型组合成一个的类型.这种类型可以包含不同的类型,例如字符串.数字或对象.这些不同类 ...
- Go 学习笔记(27)— type 关键字(类型定义、类型别名、类型查询、定义接口、定义结构体)
1. 类型别名定义 定义类型别名的写法为: type TypeAlias = Type 类型别名规定: TypeAlias 只是 Type 的别名,本质上 TypeAlias 与 Type 是同一个类 ...
- Go 学习笔记(32)— 类型系统(命名类型、未命名类型、底层类型、类型强制转换、类型别名和新声明类型)
1. 命名类型和未命名类型 1.1 命名类型 类型可以通过标识符来表示,这种类型称为命名类型( Named Type ). Go 语言的基本类型中有 20 个预声明简单类型都是命名类型, Go 语言还 ...
- 什么是类型别名?什么是潜在类型?
2019独角兽企业重金招聘Python工程师标准>>> 别名类型 在Go语言里,可以用type声明自定义的各种类型.在这些自定义的类型中,有一种被叫做别名类型. 举个例子: type ...
- 【Kotlin】函数类型 ( 函数类型 | 带参数名称的参数列表 | 可空函数类型 | 复杂函数类型 | 带接收者函数类型 | 函数类型别名 | 函数类型实例化 | 函数调用 )
文章目录 I . 函数类型 II . 带参数名的参数列表 III . 可空函数类型 IV . 复杂函数类型解读 V . 函数类型别名 VI . 带 接收者类型 的函数类型 VII . 函数类型实例化 ...
- mybatis中自建的类型别名
在使用mybatis过程中经常用到类型别名,除了我们自己新建的别名外,mybatis还自带了很多类型别名和java中的类型的映射,下面先看一个自建的别名的配置 <typeAliases>& ...
- 细嚼慢咽C++primer(4)——类(1):构造函数,类型别名
1 最简单地说,类即使定义了一个新的类型和一个新的作用域. 2 基础 1 构造函数 构造函数一般应使用一个构造函数初始化列表,来初始化对象的数据成员. Sales_item(): units_s ...
- Kotlin学习笔记 第二章 类与对象 第十二 十三节 对象表达式与对象声明 类型别名
参考链接 Kotlin官方文档 https://kotlinlang.org/docs/home.html 中文网站 https://www.kotlincn.net/docs/reference/p ...
最新文章
- Python使用matplotlib函数subplot可视化多个不同颜色的折线图、为指定的子图添加图例信息(legend)
- 终于要揭开神秘面纱?Magic Leap将要展示产品
- HDU 1084 - What Is Your Grade?
- ubuntu libapache2-mod-php5,ubuntu安装apache2 mysql5 php5
- Django两天搭建个人博客
- 【算法】BitMap
- ux和ui_设计更好的结帐体验-UX / UI案例研究
- HTTP1.1 Keep-Alive到底算不算长连接?
- 吴恩达机器学习(二)多元线性回归(假设、代价、梯度、特征缩放、多项式)
- 加密WebSphere Application Server系统密码
- 如何给图片添加文字?图片加字功能怎么使用?
- python抽奖概率设计_python 抽奖概率
- java项目开发团队协作重要性_Java1班项目实战 | 团队协作,我们是认真的!
- c语言分离个位十位百位_用c语言如何表示出一个数的个位,百位,十位
- ArcGIS学习教程(一)
- 超级简单的视频调色教程分享
- Qt在ARM或者linux上多屏显示
- 山东大学软件学院2020-2021 软件工程考试纲要与考题回忆
- WIn10 Windows Hello 指纹出现错误,请稍后再试一次的解决思路
- js识别android ios9,JS判断客户端是IOS还是ANDROID