五月天青色头像情侣网名,国产亚洲av片在线观看18女人,黑人巨茎大战俄罗斯美女,扒下她的小内裤打屁股

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

【D1n910前端學(xué)習(xí)筆記】TypeScript完全解讀(4/26) 接口

2020-01-29 04:00 作者:愛交作業(yè)的D1N910  | 我要投稿

     正常操作,正常分析,大家好,我是D1n910

TypeScript完全解讀(4/26)接口

0 核心內(nèi)容

  1. 基本用法

  2. 可選屬性

  3. 多余屬性檢查

  4. 繞開多余屬性檢查

  5. 只讀屬性

  6. 函數(shù)類型

  7. 索引類型

  8. 繼承接口

  9. 混合類型接口

1 基本用法

接口,可以為我們代碼數(shù)據(jù)定義結(jié)構(gòu)類型,讓其他人用我們的工具或者函數(shù)時,能夠遵循我們的規(guī)定。

1.1、引入 ts-lint

在項目命令行中,輸入命令:

`tslint --init`

生成tslint.json文件,它是用來配置tslint的一些規(guī)則。我們后面有涉及到規(guī)則部分的話,會在tslint.json的rules里進行配置。

1.2、安裝必要的插件

TSLint需要安裝,安裝后重新加載即可

這個安裝后,可以在.vscode下創(chuàng)建一個settings.json文件,然后填入下面的內(nèi)容,這樣可以觸發(fā)在保存時,自動幫忙修復(fù)掉語法問題。

{

"editor.codeActionsOnSave": {

"source.fixAll.tslint": true

}

}


記得在入口文件里引入

tslint現(xiàn)在修改了很多,一些之前會有語法錯誤提示的,現(xiàn)在不一定會,比如我們這邊專門添加一個quotemark屬性,設(shè)定為true

有看到有語法提示,應(yīng)該使用雙引號替代單引號

刪除剛剛的那條規(guī)則

提示也不見了

后面有語法提示報錯,那么按照語法提示進行修改or忽略即可。

1.5、定義接口

假設(shè)我們定義了一個方法 getFullName,通過結(jié)構(gòu)賦值傳一個對象,對象內(nèi)的參數(shù)是firstName和lastName,輸出為兩個的字符串拼接

直接跑是有問題的,ts會不通過,不能完成編譯,我們需要臨時把tsconfig.json的strict給設(shè)置成false,然后查看效果

是能夠正常打印,但是,實際上這邊是希望我們能夠規(guī)范類型的,比如我們希望我們傳入的參數(shù)都是string類型的。

我們可以通過【接口】關(guān)鍵詞 interface 來進行定義接口,接口名稱可以自定義,首字母大些,在對象后冒號引入接口

這時候如果我們傳入的類型錯誤,也能夠像之前一樣報錯

我們還可以像之前一樣,給函數(shù)的返回添加類型,這里是string

我們這邊也可以不指定接口,通過我們后面說的類型別名來進行類型定義——所以一看還是接口好。

2、可選屬性

設(shè)置可選屬性的意思是,對象內(nèi)的屬性可以設(shè)置為可以有也可以沒有。

考慮下面的獲取蔬菜的方法,邏輯是,蔬菜有顏色,則輸出是什么樣顏色的什么品種,如果沒有顏色,則輸出這是什么品種

設(shè)定color為red,type為tomato,我們正常打印查看

如果我們的對象只有一個屬性type呢?

發(fā)現(xiàn)報錯了,提示類型“{ type: string; }”的參數(shù)不能賦給類型“VegetablesInfo”的參數(shù)。

我們這個color參數(shù)可以有也可以沒有,可以通過加個  ? 來設(shè)定為可選參數(shù),這時候就不報錯了,也能看到正確返回的內(nèi)容


3、多余屬性檢查

如果我們多添加了一個參數(shù),也會提示有問題

提示:類型“{ type: string; color: string; size: number; }”的參數(shù)不能賦給類型“VegetablesInfo”的參數(shù)。

 對象文字可以只指定已知屬性,并且“size”不在類型“VegetablesInfo”中。

4、繞開多余屬性檢查

我們一般為了保證這個函數(shù)能夠正常運行,實際上加了size屬性不會影響到我們的函數(shù)正常運行,為了繞過這個多余屬性的檢查,我們可以通過這些方法

(1)指定類型

通過指定類型,告訴ts我們的類型就是VegetablesInfo,這樣就不會報錯了

(2)指定可添加屬性

通過指定傳入屬性值,類型是字符串,對應(yīng)的值是任意的,可以傳入任意的值

(3)利用類型兼容性

我們可以把傳入的參數(shù)摘出來,賦給一個變量,這邊的意思是后面的變量賦值,多了沒所謂,少了就不行。

這是三種繞過多余屬性檢測的方式。

5、只讀屬性

只需要在屬性面前添加 readonly 就可以設(shè)置為只讀屬性

我們通過這個接口定義一個對象

在進行賦值就會報錯

Cannot assign to 'type' because it is a read-only property.

只能讀這個type屬性而不能修改。

6、函數(shù)結(jié)構(gòu)

我們可以這么定義一個函數(shù)結(jié)構(gòu)的接口

其中左邊代表傳入?yún)?shù)及其類型,右邊代表返回值的類型

保存后,我們發(fā)現(xiàn)因為tslint的原因,自動修復(fù)為了下面這樣的格式,用type來定義一個函數(shù)類型更好。

我們可以這么使用

我們不可以返回和我們定義的不同類型的值

這邊我們的形參不一定相同,只要數(shù)量對上即可。

7、索引類型

重新定義一個類似數(shù)組接口,如下所示

會有警告不能將類型“string”分配給類型“number”。

而正確賦值類型的時候就OK

 同樣的,我們這里也可以設(shè)置為readonly

錯誤提示:Cannot assign to '1' because it is a read-only property.

我們通常這么定義索引類型的接口

錯誤提示:不能將類型“{ 'a': string; }”分配給類型“RoleDic”。

但是當我們把id值的類型換成string的時候,我們發(fā)現(xiàn)原來的myRoleDic2不報錯了,但是用數(shù)值的myRoleDic并沒有報錯。原因是在js中用數(shù)值作為屬性值時會隱式轉(zhuǎn)換成字符串


8、繼承接口

考慮下面的場景,蔬菜接口帶有color屬性,其他的子類目都有color屬性

這些重復(fù)的屬性可以抽離出來,讓子類通過繼承獲得

這么寫,myTomato會提示

Property 'color' is missing in type '{ radius: number; }' but required in type 'Tomato'

9、混合類型接口

在js中,函數(shù)是對象類型,是很靈活的,在js中對象是有屬性的,函數(shù)也可以添加屬性。

舉例子,我們在瀏覽器實現(xiàn)一個計數(shù)器,使用閉包

也可以使用命名空間的辦法


ts支持直接給函數(shù)添加屬性,即使用混合類型接口,實現(xiàn)如下

接口和類相關(guān)的內(nèi)容,可以在類那邊查看并會進行補充。



恭喜你獲得稱號

了解TypeScript的接口的勇士

你的學(xué)習(xí)進度(4/26)

▇▇ ▇▇ ▇▇ ▇▇  ▇▇ ▇▇ ▇▇ ▇▇ ▇▇ ▇▇ ▇▇ ▇▇ ▇▇ ▇▇ ▇▇ ▇▇ ▇▇ ▇▇ ▇▇ ▇▇ ▇▇ ▇▇ ▇▇ ▇▇ ▇▇ ▇▇

本小節(jié)倉庫地址

https://github.com/D1N910/ts-learning/tree/master/04

 聲明

本系列內(nèi)容是D1n910通過學(xué)習(xí)Lison老師的TypeScript完全解讀(26課時)整理的文字筆記,如果看完后覺得有收獲,抑或想要直接支持,抑或想要直接視頻原版內(nèi)容,請直接到https://segmentfault.com/ls/1650000018455856?r=bPXT7X。


雖然本系列是筆記,但是也有D1n910的心血所在,請勿在未告知D1n910及獲得D1n910允許的情況下直接轉(zhuǎn)載本筆記——如果您是基于筆記又生成您自己的筆記,這是一點問題都沒有的~


之前的內(nèi)容是


【D1n910前端學(xué)習(xí)筆記】TypeScript完全解讀(4/26) 接口的評論 (共 條)

分享到微博請遵守國家法律
茌平县| 镶黄旗| 林芝县| 绥德县| 宿迁市| 二连浩特市| 安新县| 丰城市| 凤山县| 内江市| 湖北省| 安庆市| 钦州市| 永安市| 兰考县| 平湖市| 万全县| 黄骅市| 三河市| 酒泉市| 湘阴县| 慈利县| 绥德县| 富源县| 西贡区| 克山县| 娱乐| 金坛市| 漯河市| 长子县| 桐柏县| 苍梧县| 井研县| 剑河县| 祁门县| 西乌珠穆沁旗| 雷州市| 延长县| 本溪市| 怀化市| 广东省|