JavaScript 的一个超集,主要提供了类型系统和对 ES6 的支持
基础类型
布尔值:
1 | // new Boolean()通过不了,其它基本类型也一样(除了null和undefined) |
数字:
1 | //可以用es6的进制表示数字,被编译为十进制 |
字符串:
1 | //支持模板字符串 |
void
1 | //和java一样,void一般用在函数上,表示没有返回值 |
undefined和null:
1 | //undefined 和 null 是所有类型的子类型 |
any:
1 | //可以认为,声明一个变量为任意值之后,对它的任何操作,返回的内容的类型都是任意值。 |
类型推论:
1 | //定义之后不赋值,推断为any |
联合类型:
1 | //ts在编译的时候不清楚联合类型的变量到底什么类型,只能访问它的所有类型里的共有方法和属性 |
类型断言:
1 | //将一个联合类型断言为更具体的类型,这样就不会报错了 |
数组:
1 | //这里的数组里面数值必须和前面的一样 |
元组:
1 | //元组是解决数组只能合并相同类型的方案 |
枚举:
1 | //默认从0开始编号,可手动赋值。 |
接口
行为抽象,需要由类去实现具体的行为,其实就是规范
1 | // 这里对label属性的值做一个string的校验 |
我们通过接口来对上面的代码进行一个重写:
1 | interface LabelledValue{ |
1 | //赋值的时候,变量的形状必须和接口的形状保持一致,多一个,少一个都不行 |
任意类型
1 | //当我们需要一个任意类型时 |
一旦定义了任意属性,那么确定属性和可选属性的类型都必须是它的类型的子集。A be assignable to B – A是B的子类
1 | interface Square { |
只读属性
1 | interface Person { |
ts
里面还有一种只读的数组泛型:
1 | let a: number[] = [1,2,3,4] |
可索引类型的接口:
1 | interface StringArray { |
1 | class Animal { |
设置一个只读类型的索引签名:
1 | interface ReadonlyStringArray { |
class类型
规则和java一样
这里要注意一下:es6中实例属性的新写法 – 实例属性除了定义在
constructor()
方法里面的this
上面,也可以定义在类的最顶层。
1 | // 构造器接口 |
可是如果我们想去使用一个实例类型的话,代码是可以这样写的:
1 | // 此处的tick()不用进行类型检查,在类中为静态方法(class.prototype) |
接口继承:
1 | interface Shape { |
混合类型(接口既可以当成对象使用,也可以当函数用):
1 | interface Counter { |