Typescript
1. 为什么学
面试需要, vue2(ES6) + vue3(Typescript)
webpack - es6/ts -> Javascript
React(ts)
2. Javascript超集
es5【标准】 < es6【标准】 < ts【社区】
ts = es6 + 强类型
3. 数据类型
es6是弱类型语言 (一个变量的数据类型取决于值,数据类型可以改变)
let a = undefined;
a = 2;
a = false;
ts添加了强类型特性(一个变量的数据类型在声明的时候确定,变量的数据类型一旦确定无法修改)
int a ;
a= 2;
a = false; // 失败!
基本数据类型
number
string
boolean
symbol
null
undefined
引用数据类型
enum 枚举类型
Object
通过自定义类来校验对象
let goods: Goods;
goods = {}
Array
let arr:Array<string>;
let set:Set<string>;
let map:Map<number,string>;
Function
函数通常存放在对象中,所以我们通过接口来约束对象,进而约束函数
interface Foo{
login(user:string,passwd:string):User;
}
4. hello world
ts --Typescript c---> js
ts可以设置其编译级别(ES5?ES6)
1) tsc hello.ts --target es6
2) tsconfig.json
馒头 馒头
.ts .js nodejs linux
.java .class jvm linux
.c .o linux
1) 安装typescript
$ cnpm install -g typescript
2) 编写ts代码
hello.ts
let a:number;
a = 1;
console.log(a);
3) 编译
$ tsc hello.ts
4) 执行
$ node hello.js
5. 面向对象
1) 类
class Animal {
name:string;
age:number;
}
class Dog extends Animal{
color:string;
}
let dog:Dog;
dog = new Dog();
let animal:Animal;
animal = new Dog();
animal.color; // 无法访问
2) 泛型
父类类型的引用指向子类对象,通过父类类型的引用只能访问父类中声明的特性。如果子类重写了父类的方法,通过父类类型引用来调用该方法,体现子类特性(本质还是调用子类中的方法【原型链中的就近原则】)
3) 方法重写、方法覆盖
子类中提供了一个与父类签名(函数名,参数类型,返回值)完全一致的方法
4) 抽象类
如果一个类中出现了抽象方法,那么这个类一定是抽象类;抽象类无法实例化,存在的意义是为了让其他子类继承。
5) 接口
抽象到极致抽象类;接口中的方法全部都是抽象方法,这些方法无需再使用abstract来修饰
接口是一种特殊的类,子类不再通过extends来继承,而是通过implements来实现。
6) 访问修饰符
private 只有在当前类中可以进行访问
protected 在当前类、子类中可以访问
public 所有地方都可以访问