Typescript学习笔记--进阶篇

1. 类型别名

类型别名用来给一个类型起个新名字。

使用 type 创建类型别名。

类型别名常用于联合类型。

type Name = string;
type NameResolver = () => string;
type NameOrResolver = Name | NameResolver;
function getName(n : NameOrResolver): Name {
   
    if (typeof n === 'string') {
   
        return n;
    } else {
   
        return n();
    }
}

2. 字符串字面量类型

字符串字面量类型用来约束取值只能是某几个字符串中的一个。

类型别名 与 字符串字面量类型 都是使用 type 进行定义的。

type EventNames = 'click' | 'scroll' | 'mousemove';
function handleEvent(ele: Element, event: EventNames){
   
    // ...
}
// 使用 type 定义了一个字符串字面量类型 EventNames,它只能取三种字符串中的一种。

3. 元组

数组合并了相同类型的对象,而元组(Tuple)合并了不同类型的对象。

注意:在定义时,就应该初始化。当赋值或访问一个已知索引的元素时,会得到正确的类型。

// 定义元组
let tp: [string, number] = ['tuple', 22];
// 赋值
tp[0] = 'sssss';
tp[1] = 25;
// 获取元素
tp[0]
tp[1]

当添加越界的元素时,它的类型会被限制为元组中每个类型的联合类型。就是说添加其他类型的元素会报错。

比如在上面定义的元组中进行以下操作 tp.push(true) 就会报错,因为 tp 的类型只能是 string 或者 number。

4. 枚举

枚举(Enum)类型用于取值被限定在一定范围内的场景,比如一周只能有七天,颜色限定为红绿蓝等。

enum Days { Sun, Mon, Tue, Wed, Thu, Fri, Sat};

枚举成员会被赋值为从 0 开始递增的数字,同时也会对枚举值到枚举名进行反向映射。

enum Days {
    Sun, Mon, Tue, Wed, Thu, Fri, Sat};

// 枚举值到枚举名进行反向映射
console.log(Days['Wed'] === 3); // true
console.log(Days[0] === 'Sun'); // true

4.1 手动赋值

我们可以给枚举项手动赋值,未手动赋值的枚举项会接着上一个枚举项递增。如果未手动赋值的枚举项与手动赋值的重复了,TypeScript是不会察觉到这一点的,后面的项会覆盖前面的项。

手动赋值的枚举项也可以为小数或负数,此后续未手动赋值的项的递增步长仍为 1,在小数或负数的基础上加 1

enum Days {Sun = 7, Mon = 1, Tue, Wed, Thu, Fri, Sat}; // 未手动赋值的枚举项会接着上一个枚举项递增

4.2 常数项和计算所得项

枚举项有两种类型:常数项(constant member)和计算所得项(computed member)。

// 常数项,默认第一项为0;
// 也可手动赋值第一项,后面的自递增。
enum Color {
   
    Red = 1,
    Green,
    Blue
};

// 计算所得项
enum Color {
   
    Red,
    Green,
    Blue = 'blue'.length
};
// 如果紧接在计算所得项后面的是未手动赋值的项,那么它就会因为无法获得初始值而报错。
// 因此计算所得项可以放在后面,否则其后面的项要手动赋值。
// 也就是说上面定义的 Color 枚举中的 Blue 后面还有新的项,其需要重新手动赋值,否则报错

4.3 常数枚举

常数枚举是使用 const enum 定义的枚举类型。

常数枚举与普通枚举的区别:它会在编译阶段被删除,并且不能包含计算成员。若包含计算成员,则会在编译阶段报错。

const enum Directions {
   
    Up,
    Down,
    Left,
    Right
}
let directions = [Directions.Up, Directions.Down, Directions.Left, Directions.Right];

// 编译结果:
var directions = [0/*Up*/, 1/*Down*/, 2/*Left*/, 3/*Right*/];

4.4 外部枚举

外部枚举(Ambient Enums)是使用 declare enum 定义的枚举类型。

declare 定义的类型只会用于编译时的检查

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值