元组(Tuple)
元组合并了不同类型的对象
let cuteBoy: [string, number] = ['Cute Boy', 30]; // 直接初始化赋值不能缺少任何一项
let cuteBoy: [string, number];
cuteBoy[0] = 'CuteBoy'; // 声明后赋值可以只赋值一项
越界的元素项会被限制为元组的联合类型
枚举(Enum)
enum Days {Sun, Mon, Tue, Wed, Thu, Fri, Sat};
Days["Sun"] === 0; //true
Days[0] === "Sun"; //true
该枚举将会被编译为
var Days;
(function(Days) {
Days[Days["Sun"] = 0] = "Sun";
})(Days || (Days = {}))
手动赋值
enum Days {Sun = 3, Mon = 1, Tue, Wed, Thu, Fri, Sat};
Days["Tue"] === 2; // true,未赋值项将会从上一个枚举项递增
Days["Sun"] === 3; // false,被Wed覆盖,故要避免这种情况
Days["Wed"] === 3; // true
enum Days {Sun = 3, Mon = 1, Tue, Wed, Thu, Fri, Sat = <any>"S"}; // 用类型断言,枚举项可以不是数字
常数项和计算所得项
枚举两种类型:常数项(constant member)和计算所得项(computed member);
enum Color {Red, Green, Blue = "blue".length}; // 计算所得项,后面不能紧接未赋值项
常数项:
1.数字字面量
2.引用之前定义的常数枚举成员
3.带括号的常数枚举表达式
4.+,-, ~一元运算符应用于常数枚举表达式
5.二元运算符,常数枚举表达式作为其一个操作对象
常数枚举
const enum Directions {
Up,
Down,
Left,
Right
}
let directions = [Directions.Up, Directions.Down, Directions.Left, Directions.Right];
常数枚举将会在编译后删除枚举,并且不能包含计算成员。
外部枚举
使用declare enum定义的枚举类型
declare enum Directions {
Up,
Down,
Left,
Right
}
let directions = [Directions.Up, Directions.Down, Directions.Left, Directions.Right];
编译完后也删除,常用于声明文件。
类
ES6中类的用法
属性和方法
class Animal {
constructor(name){
this.name = name;
}
sayHi() {
return `my name is ${this.name}`;
}
}
类的继承
class Cat extend Animal {
constructor(name){
super(name);
}
sayHi(){
return `meow, ${super.sayHi()}`
}
}
存取器
使用getter和setter可以改变属性饿赋值和读取行为
class Animal {
constructor(name) {
this.name = name;
}
get name() {
return 'Jack';
}
set name(value) {
console.log('setter: ' + value);
}
}
静态方法
使用static修饰,可直接通过类来调用
class Animal {
static isAnimal(a) {
return a instanceof Animal;
}
}
let a = new Animal('Jack');
Animal.isAnimal(a); // true
a.isAnimal(a); // TypeError:...
ES7中类的用法
1.实例属性可以直接在类里面定义
2.static可以修饰静态属性
TypeScript中类的用法
三种修饰符:public、private、protected