TypeScript
不是一个新语言,是javaScript的一个超集,即javaScript加上强类型
是一个第三方框架工具,给js做了大量的拓展以及强类型校验
安装
npm i -g typescript
tsc --version
tsc是一个编译器,在很多的平台上都能安装
运行
typeScript 需要tsc进行编译之后才能在nodejs或 浏览器中运行
编译完成之后,hello.ts --> hello.js 会生成hello.js
tsc 1-hello.ts
node 1-hello.js
特点
跨平台:TypeScript 编译器可以安装在任何操作系统上,包括 Windows、macOS 和 Linux。
ES6 特性:TypeScript 包含 ECMAScript 2015 (ES6) 的大部分特性,例如箭头函数。面向对象的语言:TypeScript 提供所有标准的 OOP 功能,如类、接口和模块。
静态类型检查:TypeScript 使用静态类型并帮助在编译时进行类型检查。因此,你可以在编写代码时发现编译时错误,而无需运行脚本。
数据类型
静态类型校验
即固定死类型
let a:number //那么a就固定式number类型
function test(a:number,b:number):number{
//该函数是一个number类型,那么返回值就是number类型
}
引用数据类型
let arr:(number | object);
let arr1:Array<string> = ['1','2']
export default {} //一定要写这个,否则会报错
元组数据类型
声明一个数组的时候指代数组的数量以及类型就是元组
格式:
let [number,string,boolean] = [1,'hello',false]
枚举类型
应用于前后端交互的时候,对数据定义的约束,如名字就传一个名字,性别要传送真正的性别。其他值都是不合法的值
默认枚举
格式:
enum Season{
summer
spring
winter
autumn
}
// Season ‘0’:‘summer’,‘1’:‘spring’
可以通过下标拿到数值
例:
Season[1]
字符串枚举
格式:
enum Gender{
male='男'
female='女'
}
Gender.male
任意类型 any
格式:
let a:any
泛型 Array
尖括号里面可以写任意类型的,和java类似 ,
class Student{
name:string,
age:number
}
let arr:Array<Student>=[{name:'xiaoming',age:12}]
void
函数没有返回值
格式:
function sum():void{}
可选参数 ?
格式
function sum(a?:number){}
注意,可选参数必须写在必选参数后面
接口
与java类似,通过interface关键字来声明;通过类使用关键字implements实现接口,类里面需要重写里面的属性或方法
声明接口
interface StudentInterface{
name;
say(msg:string):void;
}
类实现接口
class Student implements StudentInterface{
name;
say(msg:string):viod{}
}
对象实现接口
let res:StudentInterface ={
name=''
say(msg:string):viod{
console.log('hello')
}
}
类
类是创建对象的模板,一个类可以创建多个对象,与java类似,可以继承,且可以使用父类的引用来创建子类的实例
例:
let s:People = new Student();
那么 s 是子类的实例
类的继承 extends
类继承使用extends关键字,在子类中引用父类的方法或变量使用super关键字,注意继承是和接口不一样的,可以不用重写父类的方法;
格式:
class Student extends Person{
console.log(super.name); //name为父类的属性
}
let s1:Student = new Student();
s1.自己的属性,s1.父类的属性
多态
一种对象多种形态,即一个对象既可以是继承的父类的形态,也可以是本身自己的形态。多态的前提就是子类要继承父类
重写
当子类对父类的方法进行重写,那么子类实现调用的时候,会调用子类的方法
抽象类 abstract
无法创建对象,即new 一个对象,为了让其它类继承抽象类,并强制要求子类实现抽象方法;
注意只有抽象类才能有抽象方法,抽象方法没有方法体,即 {}
格式:
abstract class Student{
abstract study():void;
}
字面量创建实例
格式:
let s1:Student = {}
注意,通过字面量创建实例的话,不仅要重写Student类的所有方法以及属性,还要重写Student父类所有的方法以及属性。
访问修饰符
修饰类中的成员属性以及成员方法
pubilc
当前类、子类、其他类都可以访问到该属性,
protect
当前类、子类 可以访问,其他类即new的实例不可以访问,方法也不能访问
private
当前类
面试题
1.子类继承父类,通过父类类型引用可以指向子类对象吗?[可以]
class Child extends Parent{
}
let c1:Person=new Child()
2.通过父类类型得引用可以调用子类得特性吗?[不可以]
3.什么是重写?
子类继承父类?子类中方法的签名与父类一致,子类的方法回重写父类得方法
就近原则
4.如果子类对父类进行了重写,通过父类类型引用指向子类体现谁的特点?(子类方法)
5.什么是抽象类?
1.无法实例化
2.抽象类存在抽象方法和非抽象方法
3.如果一个类中包含了抽象方法,该类一定是抽象类
4.如果一个类继承了抽象类,并且这个抽象类中有多个抽象方法
那么子类1.实现所有的抽象方法
2.成为抽象类
6.什么是接口?接口就是抽象到极致的抽象类
如果一个类实现了接口,那么这个类需要将接口中所有未实现方法进行实现
7.如何实现一个接口
class Student implements StudentInterFace{}
8.接口可以继承吗?
子接口可以将父接口中所有的未实现方法进行继承
9.在ts中,可以进行多继承吗?可以进行多实现吗?
可以