基础概念
简介:微软开发、js超集、遵循ES6
优势:
- 增加了代码的可读性和可维护性:类型系统、编辑器和IDE支持
- 非常包容:类型推论、编译报错、兼容第三方库
- 活跃的社区:Google、ES6
缺点:
- 学习成本:需理解接口、泛型、类、枚举类型等
- 短期增加开发成本,但可以减少维护成本
- 构建流程需要一些 工作量
- 可能和一些库的结合不是很完美
- typescript编译的时候即使报错了,还会生成编译结果(可通过tsconfig.json配置使其编译报错不生成编译结果)
入门基础
数据类型
字符串类型: var myname: string = "xiaohong"
数字类型: var age: number = 12;
布尔类型: var man: boolean = true;
空值: let unusable: void = undefined; 只能赋值为undefined和null
Null:let n:null = null;
Undefined:let u: undefined = undefined; //undefined和null是所有类型的子类型,都可以赋值给其他类型的变量
任意类型: var alias: any = 'xxx' //变量声明未指定类型,可以被识别为任意值类型
(类型推论:声明时没有指定类型,虽然在编译的时候报错,但会根据赋的值推断出类型。如果变量声明时没有赋值则推断成any类型。)
联合类型:let u:string | number //既可以赋值string也可以赋值number
(访问联合类型的属性或方法:不确定到底是哪个类型时,只能访问此联合类型的所有类型里共有的属性或方法。)
接口
简介:在面向对象语言中,接口是一个很重要的概念,是对行为的抽象,而具体如何行动需要由类(class)去实现(implement)
TypeScript中的接口是一个非常灵活的概念,除了可用于对类的一部分行为进行抽象以外,也常用于对[对象的形状(shape)]进行描述
interface IPerson { //建议在接口名称前加I前缀做标识
name: string;
age: number;
}
let tom: Person = { //定义的变量比接口少了或者多了一些属性是不允许的
name: 'Tom',
age: 25
};
//赋值的时候,变量的形状必须和接口的形状保持一致
//可选属性,设置的可选属性添不添加都可以,但是不可以添加为定义的属性
interface: IPerson {
name: string;
age?: number; //可选属性
}
let tom: Person = {
name: 'Tom' //可以给一个属性
}
//任意属性:一旦定义了任意属性,那么确定属性和可选属性的类型都必须是它的类型的子集
interface IPerson {
name: string;
age?: number;
[propName: string]: any;
}
//只读属性:对象中的一些字段只能在创建的时候被赋值,那么可以用readonly定义只读属性
//只读的约束存在于第一次给对象赋值的时候,而不是第一次给只读属性赋值的时候
数组的类型
表示法:类型 + 方括号,数组不允许出现其他的类型
数组泛型:let fibonacci: Array<number&g