类型断言方式/类型转换
- 类型断言方式
# 1 尖括号 <string>myStr
# 2 as myStr as string
- 类型转换函数
# 例如Number()、String()、Boolean()等
let myNum: number = Number("123");
let myStr: string = String(456);
let myBool: boolean = Boolean(1);
console.log(myNum, myStr, myBool); // 123, "456", true
# 补充:其他内置:parseInt()、parseFloat()、toString()函数
#any/unknown区别
- 主要区别unknown 比any严格
// 1.unknown类型,打印没有声明对象会报错;而any不会报错
let bar:unknown = 222;
console.log(bar.msg); // Error
let foo: any = 123;
console.log(foo.msg); // OK
// 2.unknown类型赋值给string类型会报错;而any赋值不会报错
#interface/type区别
# interface定义接口的关键字;
# type定义类型别名的关键字;
#ts数据类型
新增5个
- 多元组(已知元素数量和类型的数组,元素之间可以不同,但对应位置元素类型需要相同)、any(任意类型)、enum(只能是枚举中的值)、void(没有返回值的方法)、never(从不会出现的值)
类class
属性类型:
- 实例属性:定义在构造函数内部的属性,使用绑定在this上面。只能实例去问,构造函数访问不到
- 静态属性:static关键字声明 ----只读无法修改
- 原型属性:定义在构造函数原型上的方法。**实例可以访问到。**构造函数可以通过
prototype
属性来访问
class Person(){
name:string; //属性 前面省略了public
construtor(n:string){
this.name = n;//实例属性
}
run():void{
log(this.name);
}
}
#构造函数
- constructor 构造函数会在对象创建时调用,构造函数是用于接收自定义属性值
#继承extends
继承作用: 提取类中公共部分
继承特点:
- 继承:子类将会拥有父类所有的方法和属性
- 新增:新增父类属性
- 重写:重写父类方法
#super
概念:用在子类中,来表示当前父类,可以是变量/方法
特点:
- 如果在子类中写了构造函数,就必须调用父类的构造函数-- super(name,age)
#抽象类abstract
专门用来被继承的类
特点:
- 抽象类只是为了让其他类继承的,禁止创建为对象,
- 抽象方法只能在抽象类中
#接口
概念:接口实质就是一个规范、一个定义对接标准
特点:
- 在接口中所有的方法都是抽象方法(专门对接)
- 可以对接类(限制类的结构)、方法(限制返回值)、变量(限制值类型)
#ts泛型
- 应用场景:定义函数或是类时,如果遇到类型不明确就可以使用泛型
- 泛型写法:泛型、多个泛型、继承接口(类)泛型
// 泛型
function fn1<T>(a:T):T {
return a;
}
// 泛型可以同时指定多个
function fn2<T,K>(a: T, b: K):T {
console.log(b);
return a;
}
// 泛型继承接口
interface myInter{
length:number
}
function fn3<T extends myInter>(a:T):number {
return a.length;
}
#命名空间/模块
模块:
- 任何包含顶级 import 或者 export 的文件都被当成一个模块;
命名空间:
- 命名空间使用 namespace 来定义;本质上是一个对象,原理:将相关的全局变量组织到一个对象上(类似闭包)
#tsconfig.json文件
包括include/exclude-编译路径、compilerOptions(target-被编译后的es版本、module-指定模块规范、outDir-出口)