@[TOC] TypeScript 学习
基本类型
类型 | 描述 |
---|---|
number | 数字 |
string | 字符串 |
boolean | 布尔 |
字面量 | 本身 |
any | * |
unknown | 安全类型的any,需要 类型断言转化 |
void | 空值(undefined) |
never | 没有值,用于throw 报错 |
object | 多个的话{[key:string]:类型} |
array | 类型【】,Array<类型> |
tuple | 元组,固定长度的数组 |
enum | 枚举 enum Gam{} |
类型断言 ** as 类型 或者 <类型>d
类
定义类 (实例属性,类属性【静态属性,加个static】)
构造函数(constructor)
// 构造函数会在对象创建时调用
class Dog{
constructor() {
console.log(this) 实例方法中,this表示当前的实例,当前新建的那个对象
}
}
继承(extends)
// 通过继承可以将多个类中公用的代码写在一个父类中,这样只需要写一次即可让所有的子类都同时拥有父类中的属性
- 如果希望在子类中添加一些父类中没有的属性或方法直接添加即可
- 如果在子类中添加了和父类相同的方法,则子类会覆盖(不会影响父类,重写)
class Dog extends Animal{}
super关键字 (超类)
多用于子类向父类添加属性,调用构造函数
抽象类(abstract)
不能用来创建对象,专门用来继承对象的
- 可以用于抽象方法,子类必须调用重写
接口
用来定义一个类结构,用interface
interface myInter{
name:string;
sayHello():void;
}
/**
* 实现接口就是使类满足接口的要求 implements
*
**/
class MyClass implements myInter{
name:string
constructor(name:string){
this.name =name
}
sayHello(){
log('1111')
}
}
属性的封装
/**
* public 修饰的属性可以在任意位置访问修改
* private 私有属性,只能在类内部进行访问修改,可以通过get,set获取内部属性
* protected 受包含属性,只能在类内部和子类使用
*
**/
class MyClass{
private name:string
constructor(name:string){
this.name =name
}
getNmae(){
return this.name
}
setName(value:string){
this.name = value
}
// **Ts 中设置getter,setter方法** 使用直接 per.name 会走get
get name(){
return this.name
}
set name(val:string){
this.name = val
}
}
const per = new MyClass()
per.name = 'sss' // 报错
泛型
在定义函数或是类时,如果遇到类型不明确就可以使用泛型
function fn<T>(a:T):T{
return a
}
两种调用:
fn(10) 自动判断类型
fn<类型>('hellow') 指定泛型
指用多个
function fn2<T,K>(a:T,b:K):T{
log(b)
return a
}
fn2<number,string>(111,'hello')
限制范围
// T extends Inter 表示泛型T必须是Inter实现类(子类)
interface Inter{
length:number
}
function fn3<T extends Inter>(a:T):number{
return a.length
}