typescript
类型注解
接口
在typescript当中,只要两个类型内部的结构兼容,那么这两个类型就是兼容的,可以有多余的属性
1 | interface Person { |
可选属性
对可能存在的属性进行预定义,可以捕获引用不存在属性时候的错误(静态检测)
1 | interface SquareConfig { |
只读属性
readonly对应属性,const对应变量,只能够在对象刚刚创建属性的时候修改其值
1 | interface Point { |
implements
接口可以被当做公用的方法被继承
1 | interface ClockInterface { |
数据类型
- 数组泛型
Array<元素类型>
元组:已知元素数量和类型的数组,各元素的类型不必相同
let x: [string, number]
可以越界访问,是联合的类型(赋值)
- any,适用于在运行阶段当中才确定的值,通过编译阶段的检查
- 可以用与定义数组类型(不确定有多少中数据类型,元组)
- 能够在上面调用任意的方法(和object的区别)
- void 表示没有类型,只能将它赋值为
null
或者undefined
,函数返回值 never 无法到达终点的函数的返回值类型
never是所有类型的子类型,可以赋值给仍和类型,而never类型的变量则无法被任何类型复制(除了never)
类
具有和面向对象语言同样的思想,constructor
和new
,使用extends
进行类的继承
1 |
|
注意点
- 在
constructor
当中使用super
调用基类的构造函数,调用this
之前一定要调用super()
- 在派生类当中使用
super.method
调用基类的方法 - 类当中也可以设置属性为
readonly
,在声明或者构造函数当中被初始化
函数
1 |
|
如果没有设置成可选参数的话,就不能跟原先js函数的写法传入参数一样
泛型
1 | function identity<T>(arg: T): T { |
如上面所示,泛型函数会自动检测类型。
1 | function loggingIdentity<T>(arg: T): T { |
同时可以指定特殊的泛型变量,例如输出数组的长度。如果是其他属性,则要定义泛型约束
1 | interface Lengthwise { |
模块
typescript当中内部模块成为命名空间,外部模块成为模块
- 使用
as
进行重命名
1 | import * as validator from "./ZipCodeValidator"; |
默认导出
默认导出当中可以实现自定义名称
1 | const numberRegexp = /^[0-9]+$/; |