【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.pswp.cn/news/38462.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/38462.shtml
英文地址,請注明出處:http://en.pswp.cn/news/38462.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

華為OD機試-字符串序列判定

題目描述 給定兩個字符串 s和 t &#xff0c;判斷 s是否為 t 的子序列。 你可以認為 s 和 t 中僅包含英文小寫字母。字符串 t 可能會很長&#xff08;長度n ~ 500,000&#xff09;&#xff0c;而 s 是個短字符串&#xff08;長度 <100&#xff09;。字符串的一個子序列是原…

Docker容器:docker基礎及安裝

文章目錄 一.docker容器概述1.什么是容器2. docker與虛擬機的區別2.1 docker虛擬化產品有哪些及其對比2.2 Docker與虛擬機的區別 3.Docker容器的使用場景4.Docker容器的優點5.Docker 的底層運行原理6.namespace的六項隔離7.Docker核心概念 二.Docker安裝 及管理1.安裝 Docker1.…

【科研論文配圖繪制】task1 掌握科研繪圖的基本知識

【科研論文配圖繪制】task1 掌握科研繪圖的基本知識 寫在最前 8月份Datawhale組隊學習&#xff0c;寫下該博客記錄學習內容 1.科研論文配圖的分類與構成 2.科研論文配圖的格式和尺寸 3.科研論文配圖中的字體和字號設置 4.科研論文配圖的版式設計、結構布局和顏色搭配 占個…

機器學習筆記 - 基于C++的??深度學習 三、實現成本函數

機器學習中的建模 作為人工智能工程師,我們通常將每個任務或問題定義為一個函數。 例如,如果我們正在開發面部識別系統,我們的第一步是將問題定義為將輸入圖像映射到標識符的函數F(X)。但是問題是如何知道F(X)公式? 事實上,使用公式或一系列固有規則來定義F(X)是不可行的(…

【Go 基礎篇】Go語言指針解析:深入理解內存與引用的奧秘

介紹 指針是計算機編程中的重要概念&#xff0c;它提供了直接訪問內存地址的能力&#xff0c;為程序的數據處理和內存管理提供了靈活性和效率。在Go語言&#xff08;Golang&#xff09;中&#xff0c;指針也是一種重要的數據類型&#xff0c;用于處理變量的引用和修改。本篇博…

GraphQL(六)登錄態校驗Directive

GraphQL Directive&#xff08;指令&#xff09;是GraphQL中的一種特殊類型&#xff0c;它允許開發者在GraphQL schema中添加元數據&#xff0c;以控制查詢和解析操作的行為 Directive的詳細說明及使用可見GraphQL&#xff08;五&#xff09;指令[Directive]詳解 本文將介紹通過…

勘探開發人工智能技術:機器學習(6)

0 提綱 7.1 循環神經網絡RNN 7.2 LSTM 7.3 Transformer 7.4 U-Net 1 循環神經網絡RNN 把上一時刻的輸出作為下一時刻的輸入之一. 1.1 全連接神經網絡的缺點 現在的任務是要利用如下語料來給apple打標簽&#xff1a; 第一句話&#xff1a;I like eating apple!(我喜歡吃蘋…

06 json數據解析和列表控件

內容回顧 json數據解析 json ----- 對要傳輸的數據進行封裝的工具 json是由json數組([]) 和 json對象({})在qt中,對JSON數據進行處理(解析和打包) JSON數據處理所要包含的類: QJsonDocument -----它的作用是將數據轉換成json文檔 QJsonArray ---- json數組,就是封裝多個…

User-Agent介紹

User-Agent介紹 引言 在Web開發中&#xff0c;我們經常會遇到需要根據不同的用戶設備或瀏覽器類型來進行特定處理的情況。為了達到這樣的目的&#xff0c;我們可以使用User-Agent這個HTTP頭信息字段來識別用戶的設備和瀏覽器。本篇文章將介紹User-Agent的基本概念、用法以及在…

SpringBoot 學習(02): 從嵌入式系統到嵌入式Servlet SpingBoot 的進化之路

嵌入式系統 計算機操作系統啟動后&#xff0c;會加載一系列的功能和服務&#xff0c;而這些東西都不是開發操作系統的人寫的&#xff0c;如果想讓一個生態快速崛起&#xff0c;那么操作系統的開發人&#xff0c;就要告訴大家&#xff0c;在這個操作系統上&#xff0c;你要遵守…

3.1 Ansible 的使用和配置管理

Ansible 的使用和配置管理 文章目錄 Ansible 的使用和配置管理Ansible 基礎Ansible 模塊和變量主機管理和組織角色和劇本部署應用和配置自動化與批量操作Ansible 常見用例Ansible 最佳實踐和性能優化 大綱 Ansible 簡介和特點 介紹 Ansible 的定義和作用&#xff0c;以及它在配…

【Java】Guava的Striped類。

Striped類,它提供了一種線程安全的分段鎖(Striped Locking)機制。 Striped類可以用于將一組資源或操作分成多個段(Stripes),每個段上都有一個獨立的鎖。這種機制可以在并發訪問時提供更好的性能,因為不同線程可以同時訪問不同的段而不會相互阻塞。通常,Striped鎖適用于…

pytorch3d成功安裝

一、pytorch3d是什么&#xff1f; PyTorch3D的目標是幫助加速深度學習和3D交叉點的研究。3D數據比2D圖像更復雜&#xff0c;在從事Mesh R-CNN和C3DPO等項目時&#xff0c;我們遇到了一些挑戰&#xff0c;包括3D數據表示、批處理和速度。我們開發了許多有用的算子和抽象&#xf…

【Visual Studio Code】--- Win11 安裝 VS Code 超詳細

Win11 安裝 VS Code 超詳細 概述一、下載 Vscode二、安裝 Vscode 概述 一個好的文章能夠幫助開發者完成更便捷、更快速的開發。書山有路勤為徑&#xff0c;學海無涯苦作舟。我是秋知葉i、期望每一個閱讀了我的文章的開發者都能夠有所成長。 一、下載 Vscode Vscode官網 二、…

HTTP和HTTPS協議

目錄 一、HTTP和HTTPS區別&#x1f33b; 二、有了https還有使用http場景嗎&#x1f34a; 三、https協議的工作原理&#x1f4a5; 四、https協議的優點和缺點&#x1f35e; 一、HTTP和HTTPS區別&#x1f33b; HTTP&#xff08;Hypertext Transfer Protocol&#xff09;和HTT…

時序預測 | MATLAB實現基于KNN K近鄰的時間序列預測-遞歸預測未來(多指標評價)

時序預測 | MATLAB實現基于KNN K近鄰的時間序列預測-遞歸預測未來(多指標評價) 目錄 時序預測 | MATLAB實現基于KNN K近鄰的時間序列預測-遞歸預測未來(多指標評價)預測結果基本介紹程序設計參考資料 預測結果 基本介紹 基于KNN K近鄰的時間序列預測-遞歸預測未來(多指標評價) …

macOS - 安裝使用 libvirt、virsh

文章目錄 關于 libvirt使用安裝啟動服務virsh 交互模式virsh 幫助命令 關于 libvirt libvirt 官網&#xff1a; https://libvirt.org/gitlab : https://gitlab.com/libvirt/libvirtgithub : https://github.com/libvirt/libvirt 只讀&#xff0c;gitlab 的鏡像 libvirt是一套…

機器學習之數據集

目錄 1、簡介 2、可用數據集 3、scikit-learn數據集API 3.1、小數據集 3.2、大數據集 4、數據集使用 ?所屬專欄&#xff1a;人工智能 文中提到的代碼如有需要可以私信我發給你&#x1f60a; 1、簡介 當談論數據集時&#xff0c;通常是指在機器學習和數據分析中使用的一組…

ES 概念

es 概念 Elasticsearch是分布式實時搜索、實時分析、實時存儲引擎&#xff0c;簡稱&#xff08;ES&#xff09;成立于2012年&#xff0c;是一家來自荷蘭的、開源的大數據搜索、分析服務提供商&#xff0c;為企業提供實時搜索、數據分析服務&#xff0c;支持PB級的大數據。 -- …

logstash 原理(含部署)

1、ES原理 原理 使?filebeat來上傳?志數據&#xff0c;logstash進??志收集與處理&#xff0c;elasticsearch作為?志存儲與搜索引擎&#xff0c;最后使?kibana展現?志的可視化輸出。所以不難發現&#xff0c;?志解析主要還 是logstash做的事情 從上圖中可以看到&#x…