类型别名会给一个类型起个新名字。类型别名有时和接口很像,但是可以作用于原始值,联合类型,元组以及其它任何你需要手写的类型。

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 类型别名相关推荐

  1. 接口 索引签名 接口与类型别名的异同 接口的继承 函数接口

    接口的基本使用  (接口也是一种数据类型) 接口是一种抽象方法的声明,是一些方法特征的集合,这些方法都应该是抽象的,需要具体的类去实现,然后第三方就可以同这组抽象方法调用,让具体的类执行具体的方法 e ...

  2. TypeScript中的联合类型、类型别名、接口、类型断言

    一.联合类型 在TypeScript中,联合类型(Union Types)是指用"|"符号将多个类型组合成一个的类型.这种类型可以包含不同的类型,例如字符串.数字或对象.这些不同类 ...

  3. Go 学习笔记(27)— type 关键字(类型定义、类型别名、类型查询、定义接口、定义结构体)

    1. 类型别名定义 定义类型别名的写法为: type TypeAlias = Type 类型别名规定: TypeAlias 只是 Type 的别名,本质上 TypeAlias 与 Type 是同一个类 ...

  4. Go 学习笔记(32)— 类型系统(命名类型、未命名类型、底层类型、类型强制转换、类型别名和新声明类型)

    1. 命名类型和未命名类型 1.1 命名类型 类型可以通过标识符来表示,这种类型称为命名类型( Named Type ). Go 语言的基本类型中有 20 个预声明简单类型都是命名类型, Go 语言还 ...

  5. 什么是类型别名?什么是潜在类型?

    2019独角兽企业重金招聘Python工程师标准>>> 别名类型 在Go语言里,可以用type声明自定义的各种类型.在这些自定义的类型中,有一种被叫做别名类型. 举个例子: type ...

  6. 【Kotlin】函数类型 ( 函数类型 | 带参数名称的参数列表 | 可空函数类型 | 复杂函数类型 | 带接收者函数类型 | 函数类型别名 | 函数类型实例化 | 函数调用 )

    文章目录 I . 函数类型 II . 带参数名的参数列表 III . 可空函数类型 IV . 复杂函数类型解读 V . 函数类型别名 VI . 带 接收者类型 的函数类型 VII . 函数类型实例化 ...

  7. mybatis中自建的类型别名

    在使用mybatis过程中经常用到类型别名,除了我们自己新建的别名外,mybatis还自带了很多类型别名和java中的类型的映射,下面先看一个自建的别名的配置 <typeAliases>& ...

  8. 细嚼慢咽C++primer(4)——类(1):构造函数,类型别名

    1  最简单地说,类即使定义了一个新的类型和一个新的作用域. 2  基础 1  构造函数 构造函数一般应使用一个构造函数初始化列表,来初始化对象的数据成员. Sales_item(): units_s ...

  9. Kotlin学习笔记 第二章 类与对象 第十二 十三节 对象表达式与对象声明 类型别名

    参考链接 Kotlin官方文档 https://kotlinlang.org/docs/home.html 中文网站 https://www.kotlincn.net/docs/reference/p ...

最新文章

  1. Python使用matplotlib函数subplot可视化多个不同颜色的折线图、为指定的子图添加图例信息(legend)
  2. 终于要揭开神秘面纱?Magic Leap将要展示产品
  3. HDU 1084 - What Is Your Grade?
  4. ubuntu libapache2-mod-php5,ubuntu安装apache2 mysql5 php5
  5. Django两天搭建个人博客
  6. 【算法】BitMap
  7. ux和ui_设计更好的结帐体验-UX / UI案例研究
  8. HTTP1.1 Keep-Alive到底算不算长连接?
  9. 吴恩达机器学习(二)多元线性回归(假设、代价、梯度、特征缩放、多项式)
  10. 加密WebSphere Application Server系统密码
  11. 如何给图片添加文字?图片加字功能怎么使用?
  12. python抽奖概率设计_python 抽奖概率
  13. java项目开发团队协作重要性_Java1班项目实战 | 团队协作,我们是认真的!
  14. c语言分离个位十位百位_用c语言如何表示出一个数的个位,百位,十位
  15. ArcGIS学习教程(一)
  16. 超级简单的视频调色教程分享
  17. Qt在ARM或者linux上多屏显示
  18. 山东大学软件学院2020-2021 软件工程考试纲要与考题回忆
  19. WIn10 Windows Hello 指纹出现错误,请稍后再试一次的解决思路
  20. js识别android ios9,JS判断客户端是IOS还是ANDROID

热门文章

  1. 为什么开发者将迎来万亿美元黄金时代
  2. Mybatis 逆向工程使用姿势不对文档全被清空,一怒之下写了个插件……
  3. MIUI 12 的方向走错了吗?
  4. 从“朕已阅”到“翻牌子”,程序员的仪式感可以有多重?
  5. 35 万行代码,旷视重磅开源天元深度学习框架 ,四大特性实现简单开发
  6. Rancher获4000万美元D轮融资,推动计算无处不在
  7. 分析了 3000 份 Bug 记录,可以发现什么?
  8. 人人在谈的物联网,入门开发真难!
  9. 用Scala实现简单的Web和API服务器
  10. 一文详解 Try 和异常的区别