TypeScript用法
记录 TypeScript 用法
undefined 和 null
1 | let u: undefined = undefined; |
默认情况下,null 和 undefined 是所有类型的子类型
数组类型
1 | //数组定义方式1 |
元组类型
在定义数组的时候,类型和数据的个数一开始就已经限定了
1 | let arr3: [string,number, boolean] = ['小甜甜',100,true] |
枚举
1 | enum Color { |
any
想要为哪些在编程阶段还不清楚类型的变量指定一个类型。
这些值可能来自于动态的内容,比如来自用户输入或第三方代码库
1 | let notsure: any = 4; |
void
某种程度上来说,void 类型和 any 类型相反,它表示没有任何类型,当一个函数没有返回值,通常看见其返回值类型为 void
1 | //一般用来说明函数的返回值不能是undefined和null之外的值 |
object
表示非原始类型,除了 number、string、boolean 之外的类型
1 | //这里 |
联合类型 (union types)
标识取值可以为多种类型中的一种
1 | function toString2(x;String|number):string{ |
类型断言
通过类型断言可以告诉编译器,已经做了必须的检查,类型断言好比其他语言中的类型转换,但是不进行特殊的数据检查和解构
类型断言的语法方式 1:<类型>变量名
类型断言的语法方式 2 值 as 类型
1 | function getString(str: number | string): number { |
类型推断
没有明确的指定类型的时候推测出一个类型
有两种情况:
1、定义变量时赋值了,推断为对应的类型
2、定义变量时没有赋值,推断为 any 类型
1 | let txt1 = 100; |
接口
接口是对象的状态(属性)和行为(方法)的抽象
接口时一种类型,一种规范,一种规则,一个能力,一种约束
1 | interface IPerson { |
函数调用签名
为了使用接口表示函数类型,我们需要给接口定义一个调用签名
它就像是一个只有参数列表和返回值类型的函数定义,参数列表里的每个参数都需要名字和类型
1 | //定义一个接口,用来作为某个函数的类型使用 |
类类型
1 | //类类型 :类的类型可以通过接口来实现 |
继承
A 类继承了 B 类,A 类叫子类,B 类叫基类
子类 (派生类)
基类 (超类、父类)
多态
父类型的引用指向了子类型的对象,不同类型的对象针对相同的方法,产生了不同的行为
存取器
getter 和 setter
静态属性
static 修饰
抽象类
abstract
抽象类:包含抽象方法(抽象方法一般没有任何的具体内容的实现),也可以包含实例方法,抽象类是不能被实例化,为了让子类进行实例化及实现
1 | //定义一个抽象类 |
参数 | 抽象类 | 接口 |
---|---|---|
默认的方法实现 | 它可以有默认的方法实现 | 接口完全是抽象的。它根本不存在方法的实现 |
实现 | 子类使用extends关键字来继承抽象类。如果子类不是抽象类的话,它需要提供抽象类中所有声明的方法的实现。 | 子类使用关键字implements来实现接口。它需要提供接口中所有声明的方法的实现 |
构造器 | 抽象类可以有构造器 | 接口不能有构造器 |
与正常 Java 类的区别 | 除了你不能实例化抽象类之外,它和普通 Java 类没有任何区别 | 接口是完全不同的类型 |
访问修饰符 | 抽象方法可以有public、protected和default这些修饰符 | 接口方法默认修饰符是public。你不可以使用其它修饰符。 |
main 方法 | 抽象方法可以有 main 方法并且我们可以运行它 | 接口没有 main 方法,因此我们不能运行它。(java8 以后接口可以有 default 和 static 方法,所以可以运行 main 方法) |
多继承 | 抽象方法可以继承一个类和实现多个接口 | 接口只可以继承一个或多个其它接口 |
速度 | 它比接口速度要快 | 接口是稍微有点慢的,因为它需要时间去寻找在类中实现的方法。 |
添加新方法 | 如果你往抽象类中添加新的方法,你可以给它提供默认的实现。因此你不需要改变你现在的代码。 | 如果你往接口中添加方法,那么你必须改变实现该接口的类。 |
函数
1 | //第一种写法:函数声明,命名函数 |
可选参数与默认参数
可选参数:函数在声明的时候,内部的参数使用了?进行修饰,那么就表示该参数可以传入也可以不用传入,叫可选参数
剩余参数 rest 参数
1 | //...args:string[] ---剩余的参数,放在了一个字符串的数组中,args里面 |
函数重载
函数名字相同,函数的参数及个数不同
泛型
在定义函数、接口、类的时候,不能预先确定要使用的数据类型,而是在使用时候确定
1 | function getArr4<T>(value: T, count: number): T[] { |
声明文件
当使用第三方库时,我们需要引用它的声明文件,才能获得对应的代码补全,接口提示等功能,什么是声明语句
1 | //引入第三方的库jQuery |
内置对象
1 | //ECMAScript的内置对象 |