type
status
date
slug
summary
tags
category
icon
password
enum 枚举
枚举允许开发人员定义一组命名常量。使用枚举可以更轻松地记录意图,或创建一组不同的案例。TypeScript 提供基于数字和基于字符串的枚举。
在
TypeScript
中可以通过 enum
关键字来定义枚举。数字枚举
因为在定义
ReqMethod
枚举时,没有使用初始化器,因此 Get
的值为 0,Post
的值为 1,依次递增。也可以根据实际需求调整值:手动赋值的枚举项可以不是数字,但是必须是在枚举最后,或者是初始化器之前。
字符串枚举
异构枚举
数字
与字符串
混用 属于异构枚举 虽然可以使用,但不建议这么做。反向映射
枚举除了创建具有属性名称的对象外,数字枚举还会创建从枚举值到枚举名称的反向映射。
常数项和计算所得项
枚举项有两种类型:
常数项
和 计算所得项
(上面的例子都属于常数项)。在官方定义中,只要满足以下任意一条就是常数项:
- 枚举是不具有表达式的数值枚举或字符串枚举,则每一项都是常数项(字符串枚举不允许包含计算所得项成员)
- 枚举成员使用常量表达式初始化,并且这个表达式在ts的编译阶段能够被求值
- 引用之前定义的常数枚举成员
+
,,
~
一元运算符应用于常数枚举表达式+
,,
,
/
,%
,<<
,>>
,>>>
,&
,|
,^
二元运算符应用于常数枚举表达式
除以上的其他所有情况的枚举成员都被当做计算所得项。
常量枚举
常数枚举是使用
const enum
定义的枚举类型。常量枚举与普通枚举的区别是,它会在编译阶段被删除,且不能包含计算所得项。
联合类型
联合类型是由两种或多种其他类型组成的类型,表示可能是这些类型中的任何一种的值。
联合类型使用
|
分隔每个类型。当联合类型不能确定其到底是什么类型时,只能访问联合类型所共有的东西。
限制
- 当联合类型中出现
TypeScript
的两个顶级类型时,会被合并为顶级类型
- 当联合类型中出现底部类型
never
类型时,会被过滤掉
交叉类型
交叉类型是将多个类型合并为一个类型。 这让我们可以把现有的多种类型叠加到一起成为一种类型,它包含了所需的所有类型的特性。表示方法是:
A & B
TS
的交叉类型并不是指每个类型的交集,&
的意思理解成 and
,A & B
表示同时包含 A
和 B
的结果,这里传进去的 user
必须同时拥有 name, age
这两个属性。Interfaces 接口
在 TypeScript 中我们描述一个对象的形状。
- 可以匿名描述:
- 或者是通过接口描述:
定义
- 是对行为的抽象,而具体如何行动需要由类(classes)去实现(implement)
- 在
TypeScript
中,我们使用接口Interfaces
来定义对象的类型。除了可用于对类的一部分行为进行抽象以外,也常用于对「对象的形状(Shape)」进行描述。
接口的使用
Interfaces
除了可以描述对象的形状外,还可以描述 函数、可索引类型、类。变量的形状必须和接口的形状保持一致。
可选属性
有时候需要我们不完全去匹配一个形状,可以使用可选属性(该属性可以不存在)。
任意属性
有时候我们希望接口,除了定义的属性外,可以有其他的属性。
只读属性
使用
readonly
关键字。接口合并
同名的接口会发生合并。
接口的非函数的成员应该是唯一的。如果它们不是唯一的,那么它们必须是相同的类型。如果两个接口中同时声明了同名的非函数成员且它们的类型不同,则编译器会报错。
对于函数成员,每个同名函数声明都会被当成这个函数的一个重载。合并后,后面的接口优先级更高。
接口继承
有时我们需要对已有的接口进行扩展,可以使用继承。使用
extends
关键字从其他interface
复制成员,并添加我们想要的任何新成员。type 类型别名
给一个类型起个新名字,和接口很像,但是类型别名可以为任何类型命名,而不仅仅是对象类型。
Interfaces 与 type 的区别
类型别名和接口非常相似,在很多情况下可以自由选择。几乎所有的interface特性都可以在type中使用。
区别:
- 类型扩展
- 类型别名可能不参与声明合并,但接口可以
- 接口只能用于声明对象的形状,不能声明原始类型
- 作者:小白
- 链接:https://xiaobai-notes.top/article/ts-template-2
- 声明:本文采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。