TypeScript

TypeScript

安装

npm i -g typescrip

yarn global add typescript

运行

tsc --init

数据类型

JavaScript数据类型
基本引用
numberArray
stringobject
nullfunction
undefined
boolean
Symbol

TypeScript数据类型
number
string
null
undefined
boolean
tuple(元组)
enum(枚举)
void(没有返回值)
never(从来没有出现过的值)
any(任意)
  • enum(枚举)
    • 如果没有初始化就会被当作常数,这是第一项为0,其余为前一项加一
  • never(从来没有出现过的值)
    • 永远达不到的
    • 例如:让他报错 就是永远达不到的
  • any(任意类型)
    • 可以给他赋任何值
  • void(没有返回值)
    • 可以上强制让函数没返回值
    • 函数四要素
      • 参数
      • 返回值
      • 函数的作用
      • 函数何时调用

方法和类

  • 实例属性 , 类属性 , 实例方法 , 类方法
  • 访问修饰符:修饰方法,属性
    • public:共有方法(在哪使用,都可以(本类,子类,类外))
    • private:私有方法(只能在本类使用)
    • protent:受保护的(只能在本类,子类使用)
class Person{
    static age:number=1000;
    name:string;
    constructor(){
        this.name="孙悟空" //实例属性
    }
    get():string{ //实例方法
        return this.name
    }
    set(name:string):void{ //实例方法
        this.name=name
    }
    static statcFn(){ //类方法
        console.log("类方法")
    }
}
//实例
let p=new Person()
Person.age//类属性
Person.statacFn()//类方法

可选参数+参数默认值

    function getInfo(name:string,age?:number=18):string{
            if(age){
                return name+age
            }else{
                return name
            }
    }

剩余参数 rest参数 …

    function sum(...args:number[]):number{
        let res=0
    args.forEach(item=>{
        res+=item
    })
}
sum(1,2,3,4,5,6)

重载

  • 使用场景:多人协作开发同一个项目的时候
  • 重载:同一个函数提供多个函数类型定义来进行函数重载。
  • 方法构成:方法名,参数,方法体
  • 函数构成:函数名,参数,函数体
   function getInfo(name:string):string
   function getInfo(age:number):string
   function getInfo(name:any,age?:any):any{
           if(age){
               return name+age
           }else{
               return name
           }
   }

继承(extends)

  • 子类继承父类的所有
  • 继承
  class ChildRen extends Father{
      constructor(){
          super()
      }
  }   

抽象(abstract)

  • 抽象就是规则
  • 关键字 abstract
  • 继承抽象类 必须用抽象类的东西
  abstract class Father{
      //抽象属性
      abstract str:string="我是爸爸",
      //抽象方法
      abstract fun(name:string):string
      //普通方法
      func2(){}
  }

接口(interface)

  • 类似于抽象 同上
  • 接口可以继承接口
interface FullName{
        MyName:string,
        YouName:string
}
function Ceshi(AllName:FullName){
    console.log(AllName.MyName,AllName.You)
}
let N={
    MyName:"leaphy",
    YouName:"WuQuL"
}
Ceshi(N)

参数接口

interface Config{
    type:string,
    url:string,
    data:any,
    dataType:string
}
function ajax(obj:Config){
    let xhr=new XMLHttpRequest();
            //              同步/异步
    xhr.open(obj.type,obj.url,true)
    xhr.send(obj.data)
    xhr.onreadystatechange=function(){
           if(xhr.status===200){

           } else{

           }
    }
}
 ajax({
    type:"GET",
    url:"/api/getList",
    data:{"name":"leaphy"},
    dataType:"json"
})

类 类型接口

  • 接口用<>包住 放到类后面
interface IProp{
    name:string
}
class Index extends React.Component<IProp>{
    render(){
        let {name}=this.props
        return <div></div>
    }
}

方法接口

  • 同抽象
    interface N{
        (name:string):string
    }
    let MyName:N=function(name:string):string{
        return name
    }

类型断言

  • 你比ts更了解,你要使用的类型
  • 语法:尖括号 as
//尖括号
let val:any="string"
let strlength:number=(<number[]>val).length
//as
let str1: any = "string";
let strLength1: number = (str as string).length;

泛型

  • 泛型就是在编译期间不确定方法的类型(广泛之意思),在方法调用时,由程序员指定泛型具体指向什么类型

装饰器

  • 在不修改类中方法的时候,添加额外功能
  • @符号 装饰器的语法糖
  • 种类:类装饰器,属性装饰器,方法装饰器,方法参数装饰器
//类装饰器
function A(name: string) {
   //name是A函数的参数  target是Demo类
   return function (target: any) {
       console.log(name, target)
       let NEW=new target();
       NEW.say()//
   }
}
//属性装饰器
function B(name:string){
                   //Demo类    属性名
   return function(target:any,attrName:any){
       console.log(attrName)//属性名 state
   }
}
//方法装饰器
function C(name: string) {
                                //方法名      数据属性
   return function (target: any, fnName: any, desc: any) {
       console.log(fnName, desc)//方法名 数据属性
   }
}
@A("leaphy")//类装饰器
class Demo {
   @B("属性装饰器")
   state!: string;
   @C("方法装饰器")
   say(){
       console.log("这是我想说的")
   }
}

Ts中的单例

饿汉式

//单例 饿汉式(以上来就加载)
class SingleTon {
   //私有静态变量
   private static _instance = new SingleTon()
   private constructor() { }
   public static getInstance(): SingleTon {
       return SingleTon._instance
   }
}
let a = SingleTon.getInstance();
let b = SingleTon.getInstance();
console.log(a === b, "ab")

懒汉式

//饿汉式(什么时候用,什么时候加载)
class SingleTon2 {
   private static _instance: SingleTon2;
   private constructor() { }
   public static getInstance(): SingleTon2 {
       if (!SingleTon2._instance) {
           SingleTon2._instance = new SingleTon2()
       }
       return SingleTon2._instance
   }
}
let c = SingleTon2.getInstance();
let d = SingleTon2.getInstance();
console.log(c === d, "cd")

前端自动化

  • require.context(当前路径,boolean,正则表达式)
  • directory {String} -读取文件的路径
  • useSubdirectories {Boolean} -是否遍历文件的子目录
  • regExp {RegExp} -匹配文件的正则
  require.context('./test', false, /.test.js$/);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值