当前位置: 首页 > news >正文

【TypeScript】this指向,this内置组件

this类型

      • TypeScript可推导的this类型
        • 函数中this默认类型
          • 对象中的函数中的this
          • 明确this指向
        • 怎么指定this类型
      • this相关的内置工具
        • 类型转换
          • ThisParameterType<>
          • ThisParameterType<>
          • ThisType

TypeScript可推导的this类型

函数中this默认类型

对象中的函数中的this
// 对象中的this
const obj ={a:1,b:2,fun:function(){//默认情况下,this是any类型console.log(this.a)}
}
obj.fun()//1
明确this指向
  • 步骤1:tsc --init,生成文件
    在这里插入图片描述
  • 步骤二,打开注释
  • 不让有模糊的this,必须指定this指向
    在这里插入图片描述
  • this就会更严格,这个是this根据上下文自行推导出来的类型
    在这里插入图片描述
  • 这个是没有上下文。推导不出来的,在严格模式下,不允许模糊this,所以会报错
    在这里插入图片描述

怎么指定this类型

  • 函数的第一个参数我们可以根据该函数之后被调用的情况,用于声明this的类型,名词必须叫this
  • 在后续调用函数传入参数的时候。从第二个参数开始传递,this参数会在编译后被抹除
// - 把this作为函数的第一个参数,给指定类型
function fun( this:{name:string},info:{name:string}){console.log(this)//{ name: '名字' }
}
//调用的时候,得这样调用,不然会报void类型的错误
fun.call({name:"名字"},{name:"第二个名字"})

this相关的内置工具

类型转换

  • TS提供了一些工具来辅助进行常见的类型转换,这些类型全局可用
ThisParameterType<>
  • 用于提取一个函数类型Type的this
  • 没有this,则返回unknown
ThisParameterType<>
  • 想要移除一个函数类型type的this参数类型,并且返回当前的函数类型
function fun( this:{name:string},info:{name:string}){console.log(this)
}
//获取函数的类型
type funtype = typeof fun
//想要直接获取函数的this类型,采用内置组件
type thisType= ThisParameterType<funtype>
//想要移除一个函数类型type的this参数类型,并且返回当前剩余的函数类型
type thisRemove= OmitThisParameter<funtype>export{}
ThisType
  • 被用作标记一个上下文的this类型
  • 原始方法
//原始获取this,繁琐
type User = {name: stringage: number
}
type Intype = {User: Usergetname: () => voidgetage: () => void
}
const username: Intype = {User: {name: "乞力马扎罗",age: 18},//ts接收指定的this指向getname: function (this:User) {console.log(this.name)//乞力马扎罗},getage: function (this:User) {console.log(this.age)//18}}
//call() 可以修改函数调用时 this 的指向,其余参数则会作为原函数的参数。
//第一个参数 thisArg。代表 this 将会被指向的值。如果不是对象,也会通过 Object() 方法转换为对象。如果是 null 或 undefined,this 则会指向全局对象(即 window 或 global)
//传入this指向
username.getname.call(username.User)
username.getage.call(username.User)
export { }
  • 采取ThisType<>
type User = {name: stringage: number
}
type Intype = {User: Usergetname: () => voidgetage: () => void
}
//通过ThisType<User>,将这里以后不管多少函数,this的指向始终是User
const username: Intype & ThisType<User> = {User: {name: "乞力马扎罗",age: 18},//ts接收指定的this指向getname: function () {console.log(this.name)//乞力马扎罗},getage: function () {console.log(this.age)//18}}
//call() 可以修改函数调用时 this 的指向,其余参数则会作为原函数的参数。
//第一个参数 thisArg。代表 this 将会被指向的值。如果不是对象,也会通过 Object() 方法转换为对象。如果是 null 或 undefined,this 则会指向全局对象(即 window 或 global)
//传入this指向
username.getname.call(username.User)
username.getage.call(username.User)
export { }
http://www.lryc.cn/news/125586.html

相关文章:

  • MySQL 深度分页优化
  • 如何在CSS中水平居中一个元素?
  • 生信豆芽菜-ESTIMATE预测免疫评分
  • 分享一颗能用在TYPE-C接口取电协议芯片LDR6328Q,方便好用
  • 【java】Java与SQLite3数据库类型之间对应关系
  • ELK常见部署架构以及出现的问题及解决方案
  • windows使用vscode配置java开发环境
  • centos系统kubeadm安装K8S_v1.27.x容器使用docker(K8S_v1.24版本以后依然使用docker容器管理)
  • 如何使用索引加速 SQL 查询 [Python 版]
  • Oracle 开发篇+Java通过DRCP访问Oracle数据库
  • 在安装 ONLYOFFICE 协作空间社区版时如何使用额外脚本参数
  • ChatGPT在智能家居控制和环境管理中的应用如何?
  • 理解 Go 中的切片:append 操作的深入分析(篇2)
  • GPT-4 如何为我编写测试
  • java.lang.NoClassDefFoundError: org/apache/tez/dag/api/TezConfiguration
  • 19、SQL注入之SQLMAP绕过WAF
  • Redis对象类型和结构、内存回收、对象共享
  • 标准模板库STL——容器适配器-stack/queue/priority_queue
  • Golang实现完整聊天室(内附源码)
  • WSL2 ubuntu子系统OpenCV调用本机摄像头的RTSP视频流做开发测试
  • 20230814让惠普(HP)锐14 新AMD锐龙电脑不联网进WIN11进系统
  • 基于ScrollView的下拉刷新
  • 强训第31天
  • 什么是Java中的策略模式?
  • 【Visual Studio Code】--- Win11 安装 VS Code 超详细
  • 每天一道leetcode:797. 所有可能的路径(图论中等深度优先遍历)
  • 创建预留成本中心与指定工厂不一致
  • SCF金融公链新加坡启动会 创新驱动未来
  • 希尔排序【Java算法】
  • 互联网发展历程:从布线到无线,AC/AP的崭新时代