class 类
class Person {
age: number
gender = '男'
}
1, 声明成员age,类型为number(没有初始值)
2, 声明成员gender,并设置初始值,可省略类型注解
类的构造函数
class Person {
age:number
gender:string
constructor(age:number,gender:string) {
this.age=age
this.gender=gender
}
1.成员初始化(比如,age:number)后,才可以通过this.age来访问实例成员
2.需要为构造函数指定类型注解,否则会被隐式推断为any;构造函数不需要返回值类型
类的实例方法
class Point {
x=1
y=2
scale(n:number):void {
this.x*=n
this.y*=n
}
const p=new Point()
p.scale(10)
类的继承
1.
(1).通过extends关键字实现继承
(2).子类Dog继承父类Animal,则Dog的实例对象dog就同时具有了父类Animal和子类Dog的所有属性
2.
(1).通过implements关键字让class实现接口
(2).Person类实现接口Singable意味着,Person类中必须提供Singable接口指定的所有方法和属性
class类(成员可见性)
类成员可见性:可以使用TS来控制class的方法或属性对于class外的代码是否可见
可见性修饰符包括:1.public(公有的)2.protected(受保护的)2.private(私有的)
protected:仅在其声明所在类和子类中(非实例对象)可见
private:只在当前类中可见
readonly(只读修饰符)
readonly:表示只读,用来防止在构造函数之外对属性进行赋值
1.使用readonly关键字修饰该属性是只读的,注意只能修饰属性不能修饰方法
类型兼容性
对象兼容性
对于对象类型来说,y的成员至少与x相同,则x兼容y(成员多的可以赋值给少的)
接口兼容性
接口兼容性,类似于class,并且,class和interface之间也可以兼容
函数兼容性
1.参数个数:参数少的可以赋值给多的
2.参数类型:相同位置的参数类型要相同(原始类型)或兼容(对象类型)
3.返回值类型:只关注返回值类型本身即可
交叉类型(&)
功能类似于接口继承(extends),用于组合多个类型为一个类型(常用于对象类型)
交叉类型(&)和接口继承的对比:
同名属性之间,处理类型冲突的方式不同
泛型
function id(value:number): number { return value }
function id<Type>(value: Type): Type { return value }
泛型约束收缩类型
1,指定更加具体的类型
将类型修改为Type[]
2,添加约束
创建描述约束的接口
通过extends关键字使用该接口,为泛型添加约束
多个泛型变量的情况
<Type,key extends keyof Type>(obj: Type,key: key)
keyof 关键字接收一个对象类型,生成其键名称
泛型接口
interface IdFunc<Type>{
id: (value: Type)=> Type
ids: () => Type[]
}
数组是泛型接口
泛型类
泛型(工具类型)
Partial<Type>用来构造(创建)一个类型,将Type的所有属性设置为可选
Readonly<Type>用来构造(创建)一个类型,将Type的所有属性设置为只读
Pick<Type,keys>从Type中选择一组属性来构造新类型
Record<keys,>构造一个对象类型,属性键为keys,属性类型为Type
索引签名类型
当无法确定对象中有哪些属性(或者说对象中可以出现任意多个属性),此时,就用到索引签名类型
映射类型
基于旧类型创建新类型
type Type2 = { [key in Propkeys]: number }
注意:映射类型只能在类型别名中使用,不能在接口中使用
type Type3 = { [key in keyof Props]: number }
索引查询类型
T[P] :作用: 用来查询属性的类型
注意:[]中的属性必须存在被查询类型中
type TypeA = Props['a' | 'b']
type TypeB = Props[keyof Props]
TS中的两种文件类型
.ts 代码实现文件
.d.ts 类型声明文件
类型声明文件的使用说明
使用已有的类型声明文件
1,内置类型声明文件
2,第三方库的类型声明文件
(1),库自带类型声明文件
(2),由DefinitelyTyped提供
创建自己的类型声明文件
1,项目内共享类型\
2,为已有JS文件提供类型声明
declare关键字:用于类型声明,为其他地方已存在的变量声明类型,而不是创建一个新的变量