本文主要介绍TypeScript的高级用法
1.高级类型
交叉类型
注:交叉类型是将多个类型合并为一个类型。
1 |
|
联合类型
注:联合类型是不确定的多个类型中的一个。
1 |
|
类型别名
注:类型别名会给一个类型起个新名字,不会新建一个类型。
1 |
|
索引类型
注:使用索引类型,编译器能够检查使用了动态属性名的代码。
1 |
|
映射类型
注:新类型以相同的形式去转换旧类型里每个属性。
1 |
|
2.命名空间
不同文件的命名空间
注:避免同名冲突,隐藏实现细节。
A文件:
1 |
|
B文件:
1 |
|
别名
注:简化命名空间。
1 |
|
外部命名空间
注:引入外部JS库,使用外部命名空间声明,declare 关键字代表声明。
1 |
|
3.装饰器
前置:tsconfig.json 中启用 experimentalDecorators。
注:装饰器使用 @expression这种形式,expression求值后必须为一个函数,它会在运行时被调用,被装饰的声明信息做为参数传入。
装饰器工厂
注: 装饰器工厂就是一个简单的函数,它返回一个表达式,以供装饰器在运行时调用。
1 |
|
装饰器组合
注:装饰器工厂就是一个简单的函数,它返回一个表达式,以供装饰器在运行时调用。
1 |
|
装饰器调用顺序
- 参数装饰器,然后依次是方法装饰器,访问符装饰器,或属性装饰器应用到每个实例成员。
- 参数装饰器,然后依次是方法装饰器,访问符装饰器,或属性装饰器应用到每个静态成员。
- 参数装饰器应用到构造函数。
- 类装饰器应用到类。
类装饰器
注:类装饰器在类声明之前被声明(紧靠着类声明)。 类装饰器应用于类构造函数,可以用来监视,修改或替换类定义。 类装饰器不能用在声明文件中( .d.ts),也不能用在任何外部上下文中(比如declare的类)。类装饰器表达式会在运行时当作函数被调用,类的构造函数作为其唯一的参数。如果类装饰器返回一个值,它会使用提供的构造函数来替换类的声明。
1 |
|
方法装饰器
注:方法装饰器声明在一个方法的声明之前(紧靠着方法声明)。 它会被应用到方法的 属性描述符上,可以用来监视,修改或者替换方法定义。 方法装饰器不能用在声明文件( .d.ts),重载或者任何外部上下文(比如declare的类)中。如果方法装饰器返回一个值,它会被用作方法的属性描述符。
方法装饰器表达式会在运行时当作函数被调用,传入下列3个参数:
- 对于静态成员来说是类的构造函数,对于实例成员是类的原型对象。
- 成员的名字。
- 成员的属性描述符。
1 |
|
访问器装饰器
注:访问器装饰器声明在一个访问器的声明之前(紧靠着访问器声明)。 访问器装饰器应用于访问器的 属性描述符并且可以用来监视,修改或替换一个访问器的定义。 访问器装饰器不能用在声明文件中(.d.ts),或者任何外部上下文(比如 declare的类)里。
访问器装饰器表达式会在运行时当作函数被调用,传入下列3个参数:
- 对于静态成员来说是类的构造函数,对于实例成员是类的原型对象。
- 成员的名字。
- 成员的属性描述符。
1 |
|
属性装饰器
注:属性装饰器声明在一个属性声明之前(紧靠着属性声明)。 属性装饰器不能用在声明文件中(.d.ts),或者任何外部上下文(比如 declare的类)里。
属性装饰器表达式会在运行时当作函数被调用,传入下列2个参数:
- 对于静态成员来说是类的构造函数,对于实例成员是类的原型对象。
- 成员的名字。
1 |
|
参数装饰器
注:参数装饰器声明在一个参数声明之前(紧靠着参数声明)。 参数装饰器应用于类构造函数或方法声明。 参数装饰器不能用在声明文件(.d.ts),重载或其它外部上下文(比如 declare的类)里。参数装饰器只能用来监视一个方法的参数是否被传入。
参数装饰器表达式会在运行时当作函数被调用,传入下列3个参数:
- 对于静态成员来说是类的构造函数,对于实例成员是类的原型对象。
- 成员的名字。
- 参数在函数参数列表中的索引。
1 |
|