【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://xiahunao.cn/news/1382823.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

光遇android和ios有什么区别,光遇安卓和苹果可以一起玩吗?

01 首先经过测试&#xff0c;国际服的安卓和苹果是可以一起玩的&#xff0c;这两个平台的玩家可以相互添加好友&#xff0c;并且在地图中也可以看到各自的身影。既然国际服才用了互通的规则&#xff0c;那么国服自然也应该互通&#xff0c;但是受到系统兼容等问题的影响&#x…

ios的皇室战争怎么转android,皇室战争苹果怎么转安卓?小问题,让小编来告诉你...

皇室战争苹果怎么转安卓&#xff1f;小问题&#xff0c;让小编来告诉你 皇室战争安卓国服即将上线&#xff0c;许多玩家都满怀期待&#xff0c;不过也有一些疑问&#xff0c;就是皇室战争苹果可以转安卓吗&#xff1f;皇室战争苹果可以和安卓数据互通吗&#xff1f;看这里 皇室…

android转服务器吗,王者荣耀角色迁移iOS区可以转安卓区吗 王者荣耀角色迁移iOS区转安卓区详情...

王者荣耀角色迁移iOS区可以转安卓区吗?王者荣耀在王者营地中推出角色迁移功能&#xff0c;角色迁移上线后不少玩家都在问iOS区可以转安卓区的问题&#xff0c;下面小编带来了王者荣耀角色迁移iOS区转安卓区详情&#xff0c;一起来看看吧。 王者荣耀角色迁移iOS区转安卓区详情 …

ios系统换成android系统 游戏,2020王者荣耀苹果转换安卓系统 王者苹果转换安卓系统怎么转...

2020王者苹果怎么转换安卓系统?王者苹果转换安卓系统怎么转?相信很多IOS玩家都想换成安卓手机&#xff0c;可是却不知道怎么把游戏账号转移到安卓系统上。关于相关的转移操作&#xff0c;就随琵琶网小编来了解一下吧! 2020王者苹果怎么转换安卓系统? 很多IOS都有看到自己身边…

个性闹钟屏保带滚动字幕

基于我的时间工具&#xff08;有数字版和插件版&#xff09;的衍生修改而来 功能&#xff1a; 1&#xff09;滚动字幕可滚动可静止&#xff0c;可自定义文本 颜色 速度等&#xff0c;类似LED电子显示屏 &#xff08;或投影仪投屏使用&#xff09; 2&#xff09;带阴历 阳历 …

自定义屏保

先创建一个form窗体应用&#xff0c;然后在里面放几个文本框&#xff0c; 然后双击这个窗体进入代码页面 开始初始化的代码 隐藏或者显示Label控件&#xff0c;以及要改变的对象 在显示或者预览和屏保前&#xff0c;对所有的控件进行控制 屏保的设置。计算器、背景等

Win10屏保设置位置在哪里可以找到

如果我们感觉自己在离开电脑时&#xff0c;屏幕容易耗电&#xff0c;或者不想被看到屏幕内容&#xff0c;就可以设置屏幕保护&#xff0c;那么win10屏保设置在哪里呢&#xff0c;其实个性化中就能设置。 更多重装系统教程尽在小白系统重装官网 1、首先右键桌面空白处&#xf…

win7计算机锁频图片怎么设置,win7电脑锁屏壁纸怎么设置为个性化图片?

当我们每天使用win7系统电脑时&#xff0c;如果我们暂时离开电脑&#xff0c;系统会自动进入锁屏状态&#xff0c;但是有些用户认为默认的锁屏壁纸太单调&#xff0c;一点都不美观。很多用户想修改锁屏界面壁纸&#xff0c;那么win7电脑锁屏壁纸怎么设置呢&#xff1f;以下小编…

c++11 标准模板(STL)(std::basic_fstream)(五)

定义于头文件 <fstream> template< class CharT, class Traits std::char_traits<CharT> > class basic_fstream : public std::basic_iostream<CharT, Traits> 类模板 basic_fstream 实现基于文件的流上的高层输入/输出。它将 std::basic_i…

Vue在页面输出JSON对象,测试接口可复制使用

效果图&#xff1a; 数据处理前&#xff1a; 数据处理后&#xff1a; 代码实现&#xff1a; HTML: <el-table height"600" :data"tableData" border style"width: 100%" tooltip-effect"dark" size"mini"><el-…

接触式静电压测试仪的使用场景和注意事项

接触式静电压测试仪是一种用于测量物体表面静电电势的工具。它使用金属接触针或传感器接触待测试物体表面&#xff0c;通过测量传感器和地面之间的电势差来确定物体表面的静电电势。 接触式静电压测试仪通常用于以下场景&#xff1a; 1. 静电防护&#xff1a;在静电敏感环境中…

3dsmax中计算机快捷键大全,3Dmax快捷键大全

A——角度捕捉开关 B——切换到底视图 C——切换到摄像机视图 D——封闭视窗 E——切换到轨迹视图 F——切换到前视图 G——切换到网格视图 H——显示通过名称选择对话框 I——交互式平移 J——选择框显示切换 K——切换到背视图 L——切换到左视图 M——材质编辑对话框 N——动…

手机测试要点大全

功能测试&#xff08;Functional Testing&#xff09;是最基本的测试&#xff0c;主要 根据需求规格说明书验证功能是否实 功能测试要点&#xff1a; 1.多考虑用户是在什么情况下如何使用该功能。 如&#xff1a;断网的时候访问网站&#xff0c;或者使用键盘快捷键进行操作等…

IMU惯性测量单元相关技术(概念版)

重要说明&#xff1a;本文从网上资料整理而来&#xff0c;仅记录博主学习相关知识点的过程&#xff0c;侵删。 一、参考资料 新手入门系列3——Allan方差分析方法的直观理解 惯性测量单元Allan方差分析详解 IMU误差&测量模型 IMU标定之—Allan方差 IMU误差模型简介及VINS…

RPG Maker MV之起始队伍设置

新建一个游戏工程&#xff0c;默认运行&#xff0c;你可以开心的控制一个人物在初始地图行走&#xff0c;但是&#xff0c;人物后面跟着3个其他人物&#xff0c;我们一般游戏刚开始玩家只有1人&#xff0c;之后随着剧情的发展&#xff0c;慢慢加入新的游戏人物到玩家队伍里&…

RPG Maker MV 旅馆和商店

目录 旅馆 商店 旅馆 绘制出一个旅馆的样子&#xff0c;然后快速设置旅店即可。 下图是旅店的自动生成代码&#xff0c; 商店 绘制好商店&#xff0c;图中这个是商人。 注意下图的价格是你购买物品时选择标准时的价格&#xff0c;也是你出售物品的价格一半&#xff0c;

RPG

J2ME RPG游戏边学边做&#xff08;一&#xff09;   笔者以前是做j2ee的&#xff0c;一个月前由于兴趣所致开始利用业余时间学习j2me游戏开发。在网上看了一通教程后&#xff0c;便准备动手一边学一边做一个简单的rpg游戏。虽然起点比较高&#xff0c;但感觉游戏难度越大&…

RPG Maker MV-场所移动

绘制两张地图 第一张地图是世界&#xff0c;第二张是外观。 在事件模式中快速创建场所移动&#xff0c;从第一张图移动到第二张。 剩余的懒得再从语雀搬过来了。 我的语雀笔记

RPGMaker MV 插件基础02:插件的参数定义

回顾上一节&#xff0c;我们创建了一个test.js文件&#xff0c;对应的插件名称就是test&#xff0c;我们定义了插件的名称&#xff0c;作者与帮助信息&#xff0c;这节讲一下如何定义插件的参数并且通过js代码获得参数 还是接着上一节的js文件&#xff0c;在定义作者与帮助信息…

软件外包开发的桌面客户端开发

跨平台桌面客户端开发工具允许开发者在多个操作系统上构建应用程序&#xff0c;从而实现一次编码、多平台运行的目标。以下是几个常见的跨平台桌面客户端开发工具以及它们的特点&#xff0c;希望对大家有所帮助。北京木奇移动技术有限公司&#xff0c;专业的软件外包开发公司&a…