精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

看完還不會(huì)用TypeScript 泛型,你來(lái)找我

開(kāi)發(fā) 前端
本篇文章主要介紹 typeScript 中新增的泛型概念、泛型使用、泛型與接口結(jié)合等內(nèi)容。

本篇文章主要介紹 typeScript 中新增的泛型概念、泛型使用、泛型與接口結(jié)合等內(nèi)容。

在實(shí)際應(yīng)用中可能會(huì)遇到求最小值的問(wèn)題,比如求數(shù)組中的最小值。

在 ts 中的就需要寫兩種方式,一種針對(duì) number,另外一種針對(duì)字符串。

這樣寫不利于代碼重用,項(xiàng)目較大時(shí),性能較差,同時(shí)工作效率也低,所以在 ts 中引入了泛型概念。

function getMin1(arr:number[]):number {
let min = arr[0]
for (var i = 1; i < arr.length; i++){
if (min > arr[i]) {
min = arr[i]
}
}
return min
}
console.log(getMin1([1, 2, 3, 4]));
function getMin2(arr:string[]):string {
let min = arr[0]
for (var i = 1; i < arr.length; i++){
if (min > arr[i]) {
min = arr[i]
}
}
return min
}
console.log(getMin2(['a', 'b', 'c']));

1、泛型是啥?

泛型英文是 generics ,是指在定義函數(shù)、接口或類的時(shí)候,不預(yù)先指定具體的類型,而是在使用的時(shí)候再指定類型的一種。

定義方式:

function fnName<T>(arg:T,...):T{
return ...
}

泛型變量通常用 T 來(lái)表示,T可以表示任何類型。

所以呢,我們可以將上述實(shí)例修改成以下代碼:

function getMin<T>(arr: T[]): T{
let min = arr[0]
for (var i = 1; i < arr.length; i++){
if (min > arr[i]) {
min = arr[i]
}
}
return min
}
getMin<number>([1, 2, 3, 4])
getMin<string>(['a', 'b', 'c', 'd'])

上述代碼中,T 的主要作用就是幫助我們來(lái)捕獲用戶傳入的類型,比如 :number 或 string 。另外編譯器也會(huì)根據(jù)傳入的參數(shù)自動(dòng)地幫助我們進(jìn)行類型推斷,然后把 T 設(shè)置為它的類型,所以可以忽略類型的傳入,如:

getMin([1, 2, 3, 4])
getMin(['a', 'b', 'c', 'd'])

在一些復(fù)雜的情況下,為了防止編譯器自動(dòng)推斷類似失敗,盡可能地將類型傳入,防止出錯(cuò)。

2、泛型類型

泛型函數(shù)的類型和非泛型函數(shù)的類型有什么不同?

它們看著很相似,泛型函數(shù)類型前面有一個(gè)類型參數(shù) 。

對(duì)于泛型函數(shù)類型還有以下特性:

a>、泛型函數(shù)類型可以有多個(gè)參數(shù)

function fn<T, U>(arg1: T, arg2: U) {
return arg1
}

b>、泛型函數(shù)可以使用不同的泛型參數(shù)名

function fn<T>(arg1: T) {
return arg1
}
let Fn: <M>(arg1: M) => M = fn

c>、可以使用帶有對(duì)象字面量的方式定義泛型函數(shù)

function fn<T>(arg1: T) {
return arg1
}
let Fn: {<T>(arg: T): T} = fn

3、泛型接口

在使用對(duì)象字面量的方式定義泛型函數(shù)時(shí),對(duì)象的形式可以替換成接口的形式,改為:

let Fn: { <T>(arg: T): T } = fn

//替換為

interface FnInter{
<T>(arg: T): T
}
let Fn: FnInter = fn

這種方式存在問(wèn)題:函數(shù)對(duì)數(shù)據(jù)類型一無(wú)所知,無(wú)法使用某個(gè)數(shù)據(jù)類型進(jìn)行操作。所以需要改良下,將類型作為參數(shù)傳入,如:

interface FnInter<T>{
(arg:T): T
}
let Fn: FnInter<string> = fn

這樣我們就能清楚地知道使用的具體是那個(gè)泛型類型。

我們將整個(gè)接口當(dāng)做泛型參數(shù),就叫做泛型接口。它的優(yōu)點(diǎn)就是我們能清除知道參數(shù)的數(shù)據(jù)類型,接口內(nèi)的成員也能知道參數(shù)的具體類型。

4、泛型類

除了有泛型接口之外,還有接口類。泛型類與泛型函數(shù)差不多。

語(yǔ)法格式為:

class 名稱<T>{}
new 類名<類型>()
class GetMin<T>{
arr: T[] = []
add(ele:T) {
this.arr.push(ele)
}
getMin(): T{
var min = this.arr[0]
for (var i = 0; i < this.arr.length; i++){
if (min > this.arr[i]) {
min = this.arr[i]
}
}
return min
}
}
let gMin1 = new GetMin<number>()
gMin1.add(1)
gMin1.add(5)
console.log(gMin1.getMin());//1

let gMin2 = new GetMin<string>()
gMin2.add('a')
gMin2.add('b')
console.log(gMin2.getMin());//2

5、泛型約束

泛型功能確實(shí)挺強(qiáng)大的,但它也不是萬(wàn)能的。比如:

function getLength<T>(val: T): number {
return val.length;
}

錯(cuò)誤信息提示:類型“T”上不存在屬性“l(fā)ength”。

原因是只有字符串、數(shù)組才有 length 屬性,對(duì)于數(shù)字、對(duì)象沒(méi)有 length 屬性,所以報(bào)錯(cuò)了。解決辦法是要保證傳入的數(shù)據(jù)類型有 length 屬性,所以需要使用泛型約束。

泛型約束主要是通過(guò)接口 + extends 關(guān)鍵字來(lái)實(shí)現(xiàn)約束。

interface ILen{
length:number
}
function getLength<T extends ILen>(val: T): number {
return val.length;
}
console.log(getLength<string>("abcd"));
console.log(getLength<number>(1)); //錯(cuò)誤提示:類型“number”不滿足約束“ILen”。

使用泛型約束的優(yōu)點(diǎn)是幫我們自動(dòng)檢測(cè)傳入的值是否符合約束類型的值,不滿足時(shí)就會(huì)有錯(cuò)誤提示。

6、泛型參數(shù)默認(rèn)類型

在 typeScript 2.3 以后,可以為泛型中的類型參數(shù)指定默認(rèn)類型,當(dāng)使用泛型時(shí)沒(méi)有指定參數(shù)類型,并且編輯器從實(shí)際參數(shù)中也無(wú)法推斷出數(shù)據(jù)類型時(shí),就使用默認(rèn)類型。

使用簡(jiǎn)單:

interface P<T = string>{
name:T
}
let p1: P = { name: "小姐姐" }
let p2: P<number> = { name: 18 }

泛型參數(shù)的默認(rèn)類型遵循以下規(guī)則:

  • 有默認(rèn)類型的類型參數(shù)被認(rèn)為是可選的。
  • 必選的類型參數(shù)不能在可選的類型參數(shù)后。
  • 如果類型參數(shù)有約束,類型參數(shù)的默認(rèn)類型必須滿足這個(gè)約束。
  • 當(dāng)指定類型實(shí)參時(shí),你只需要指定必選類型參數(shù)的類型實(shí)參。 未指定的類型參數(shù)會(huì)被解析為它們的默認(rèn)類型。
  • 如果指定了默認(rèn)類型,且類型推斷無(wú)法選擇一個(gè)候選類型,那么將使用默認(rèn)類型作為推斷結(jié)果。
  • 一個(gè)被現(xiàn)有類或接口合并的類或者接口的聲明可以為現(xiàn)有類型參數(shù)引入默認(rèn)類型。
  • 一個(gè)被現(xiàn)有類或接口合并的類或者接口的聲明可以引入新的類型參數(shù),只要它指定了默認(rèn)類型。

7、泛型條件類型

在 typeScript 2.8 中,引入了條件類型,我們可以根據(jù)某些條件得到不同的類型,此處的條件是類型兼容性約束。

條件類型會(huì)以一定條件表達(dá)式進(jìn)行類型關(guān)系檢測(cè),從而在兩種類型中選擇其一:

使用語(yǔ)法:

T extends U ? X : Y

以上表達(dá)式的意思是:若 T 能夠賦值給 U,那么類型是 X,否則為 Y。

責(zé)任編輯:姜華 來(lái)源: 今日頭條
相關(guān)推薦

2021-03-16 15:12:57

CompletableFuture機(jī)制java

2020-05-14 08:59:28

API網(wǎng)關(guān)性能

2024-09-09 08:36:36

Java操作遠(yuǎn)程服務(wù)器

2024-08-12 12:25:25

SpringMVC開(kāi)發(fā)

2023-11-08 08:27:30

泛型Java

2021-05-10 08:34:37

USB接口USB網(wǎng)絡(luò)設(shè)備

2020-10-09 09:49:18

HTTPS網(wǎng)絡(luò) HTTP

2022-01-03 18:07:56

泛型場(chǎng)景demo

2020-09-01 14:17:03

WindowsDefender微軟

2019-08-27 10:55:59

MySQLJOINSQLite

2020-10-21 10:02:16

架構(gòu)運(yùn)維技術(shù)

2018-09-13 10:40:40

Linux命令find

2020-09-27 06:50:56

Java互聯(lián)網(wǎng)注解

2021-10-17 13:10:56

函數(shù)TypeScript泛型

2019-09-03 09:30:46

ss 命令SocketLinux

2020-09-15 09:50:47

程序員技能開(kāi)發(fā)者

2020-12-18 09:45:33

DockerLinux命令

2025-10-14 09:40:48

2020-08-26 14:40:38

explainMySQL數(shù)據(jù)庫(kù)

2025-07-04 02:00:00

點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

奇米狠狠一区二区三区| 国产理论在线| 国产成人午夜片在线观看高清观看 | 欧美亚洲第一页| 风间由美一二三区av片| 理论片午夜视频在线观看| 久久精品欧美一区二区三区不卡| 成人国内精品久久久久一区| 久久久久久久久久久久久久免费看 | 亚洲精品成人精品456| 精品国产一区二区三| 中文精品久久久久人妻不卡| 国产精品大片免费观看| 国产一区二区激情| 国产免费a级片| a屁视频一区二区三区四区| 亚洲成人动漫精品| 正在播放一区| 你懂的在线看| www.亚洲国产| 亚洲free性xxxx护士白浆| 国产精品.www| 天天超碰亚洲| 亚洲三级免费看| 男女性杂交内射妇女bbwxz| 成人黄色免费观看| 欧美性xxxxxx| 国产无限制自拍| 国产三区视频在线观看| 国产欧美日产一区| 久久久精彩视频| 国产高清视频免费| 久久99国产精品免费| 日韩av第一页| 国产精品视频一区在线观看| 在线成人h网| 欧美成人免费小视频| 国产精品www爽爽爽| 网友自拍区视频精品| 精品免费视频.| 中文字幕亚洲日本| 你懂得影院夜精品a| 欧美日韩免费看| 欧美乱大交xxxxx潮喷l头像| av黄色在线| 亚洲欧洲国产日韩| 成人手机视频在线| 色的视频在线免费看| 日本一区二区三区dvd视频在线| 看高清中日韩色视频| 午夜性色福利视频| 99久久精品99国产精品| 国产美女99p| 动漫av一区二区三区| 成人小视频在线观看| 国产a一区二区| 亚洲av无码国产综合专区| 国产成人亚洲综合色影视| 91免费版网站在线观看| 国产夫妻自拍av| 成人激情午夜影院| 精品蜜桃传媒| 你懂的视频在线| 中文字幕免费一区| 在线视频一区观看| 四虎影院观看视频在线观看 | 成人97精品毛片免费看| 在线不卡a资源高清| 三级性生活视频| 亚洲国产高清在线观看| 精品剧情在线观看| 国产精品久久无码| 久操精品在线| 久久精品一本久久99精品| www青青草原| 亚洲视频精品| 日本成熟性欧美| 亚洲视频在线观看一区二区| 国产在线视频不卡二| 成人在线看片| 青青草手机在线| 国产精品欧美久久久久一区二区| 一本二本三本亚洲码| 国产羞羞视频在线播放| 日韩欧美黄色动漫| www.夜夜爽| 成人动态视频| 亚洲欧美中文日韩在线v日本| 制服丨自拍丨欧美丨动漫丨| 亚洲小说欧美另类社区| 国产成人久久久精品一区| 中文字幕资源网| 粉嫩绯色av一区二区在线观看| 久久亚洲免费| 免费大片在线观看www| 亚洲国产精品久久久久秋霞影院| 国产熟女高潮视频| 国产精品777777在线播放| 亚洲国产私拍精品国模在线观看| 美女100%无挡| 国产主播精品| 国产精品人人做人人爽| 黄色一级a毛片| 国产精品国产三级国产普通话蜜臀 | 亚洲色图二区| 日本不卡高字幕在线2019| 99在线观看免费| 久久久精品蜜桃| av动漫在线免费观看| 成人看片网站| 精品国产乱码久久久久久蜜臀 | 99国产**精品****| 欧美亚洲在线视频| 午夜精品无码一区二区三区| 国产日产欧美精品一区二区三区| 日韩极品视频在线观看| 久久久精品一区二区毛片免费看| 日韩黄色高清视频| 久久这里只有精品国产| 精品一区精品二区高清| 日韩av一级大片| 日韩大片免费观看| 欧美成人r级一区二区三区| 欧美88888| 日韩有码一区二区三区| 欧美成熟毛茸茸复古| 免费毛片在线看片免费丝瓜视频 | 美女被爆操网站| 久久国产精品成人免费观看的软件| 5278欧美一区二区三区| 刘亦菲久久免费一区二区| 18成人在线视频| 污污的网站免费| 精品一区二区三| 国产精品18久久久久久首页狼| 五月天激情开心网| 亚洲午夜激情av| 日韩高清一二三区| 欧美成人日韩| caoporn国产精品免费公开| 伦xxxx在线| 欧美高清你懂得| 婷婷久久综合网| 激情欧美一区二区三区在线观看| 亚洲一区二区在| 日本精品久久| 久久午夜a级毛片| 99在线观看精品视频| 亚洲黄色av一区| 少妇伦子伦精品无吗| 狠狠综合久久| 国内精品二区| a日韩av网址| 亚洲网站在线播放| 中文字幕第2页| 亚洲欧美一区二区在线观看| 91精产国品一二三产区别沈先生| 小小影院久久| 国产高清精品一区二区| 91av久久| 亚洲欧美综合v| 免费看av在线| 亚洲人妖av一区二区| 中文字幕制服丝袜| 国产日韩欧美三区| 亚洲精品久久区二区三区蜜桃臀| 日韩久久一区| 久久99久国产精品黄毛片入口| 欧美 日韩 国产 成人 在线| 黑人欧美xxxx| 中国美女黄色一级片| 国产一区视频在线看| 日韩欧美不卡在线| 精品一区二区三| 99影视tv| 毛片无码国产| 久久久精品影院| 天天操天天射天天舔| 在线免费亚洲电影| 久久久久久久久久网站| 97久久人人超碰| 伊人影院综合在线| 亚洲视频福利| 99久久精品情趣| 国产精品tv| 亚洲午夜av电影| 一区二区的视频| 亚洲国产欧美在线人成| 麻豆av免费观看| 国产一区二区精品在线观看| 91精品国产91久久久久麻豆 主演| 国产日产精品一区二区三区四区的观看方式 | 午夜伦理在线| 91精品国产高清一区二区三区| 国产精品23p| 国产精品视频一二三区| 精人妻一区二区三区| 日日夜夜精品免费视频| 992tv快乐视频| 狠狠做六月爱婷婷综合aⅴ| 99高清视频有精品视频| 色天使综合视频| 91国产美女在线观看| 色哟哟免费在线观看| 日韩电影免费在线观看中文字幕| 亚洲无码精品在线播放| 狠狠久久亚洲欧美专区| 性欧美videos| 久久精品综合网| 逼特逼视频在线观看| 精品一区二区三区的国产在线播放 | 欧洲一区二区视频| yellow91字幕网在线| 亚洲性无码av在线| 天堂在线中文字幕| 日韩精品一区二区三区在线 | 国产中文字幕精品| 成人性视频欧美一区二区三区| 精品91视频| avove在线观看| 久久在线播放| 日韩视频专区| 免费成人av| 久久青青草综合| 国产精品网在线观看| 亚洲自拍偷拍第一页| 四虎精品在线观看| 国产欧美亚洲精品| 日韩高清在线| 国产精品美女av| 日韩在线影院| 国产成人亚洲精品| 正在播放日韩精品| 91成品人片a无限观看| 超碰中文在线| 欧美激情亚洲精品| 色av手机在线| 色综合久久中文字幕综合网小说| 免费在线看黄| 久久亚洲精品网站| 91精选在线| 久久久久国产精品一区| 国产素人视频在线观看| 久久久国产成人精品| 成人福利片网站| 色综合色综合网色综合| 亚洲淫性视频| 欧美黑人一级爽快片淫片高清| 伊人春色在线观看| 色综合导航网站| 91在线三级| 97不卡在线视频| 欧美电影免费观看| 国产精品流白浆视频| 少妇高潮一区二区三区99| 91在线网站视频| 日韩免费成人| 国产一级二级三级精品| 五月综合久久| 午夜久久资源| 欧美在线91| 91精品国产91久久久久麻豆 主演| 一区二区毛片| 在线免费视频a| 国产老肥熟一区二区三区| 中文字幕av一区二区三区人妻少妇| 国产成人精品一区二区三区四区 | 欧美精品videos另类日本| av在线小说| 日韩av手机在线| 欧美一级网址| 国产精品视频一区二区三区经| 欧美一区 二区| 日韩理论片在线观看| 91精品国产自产拍在线观看蜜| 日韩精品久久一区二区| 午夜一区在线| 国产高清999| 99视频超级精品| 男人天堂资源网| 亚洲成人免费影院| 色老头一区二区| 日韩精品一区二区三区视频播放| 性猛交xxxx| 日韩视频在线观看免费| a√中文在线观看| 国产精品旅馆在线| 久久草在线视频| 亚洲精品免费在线看| 激情av一区| 九色91popny| 不卡视频一二三| 成人无码精品1区2区3区免费看 | 国产理论在线播放| 国产成人精品免费| 欧美丰满老妇熟乱xxxxyyy| 亚洲一区二区三区自拍| 波多野结衣影片| 亚洲电影中文字幕| 老司机精品影院| 日韩免费观看av| www.成人网| 一区二区三区视频| 亚洲欧美日本国产专区一区| 杨幂一区二区国产精品| 中文字幕第一区第二区| 日本一区二区三区免费视频| 欧美电影一区二区三区| 韩国三级在线观看久| 欧美激情一区二区三区高清视频 | 欧美午夜视频网站| 蜜臀久久精品久久久久| 精品国产美女在线| 视频一区在线免费看| 激情伦成人综合小说| 中文不卡在线| 亚洲这里只有精品| 国产天堂亚洲国产碰碰| 你懂的国产视频| 欧美v亚洲v综合ⅴ国产v| 国产在线69| 国产精品色婷婷视频| 伊人春色精品| 国产精品网站免费| 丰满岳乱妇一区二区三区| 日韩欧美国产成人精品免费| 欧美性一区二区| 国产视频福利在线| 2021久久精品国产99国产精品| 综合激情网...| av动漫在线播放| 国产精品资源网| 欧美精品99久久久| 日韩午夜av电影| 污片在线免费观看| 亚洲free嫩bbb| 欧美人成在线| 蜜桃视频无码区在线观看| 亚洲欧洲综合另类| 国产三级漂亮女教师| 久热99视频在线观看| 欧美天堂一区二区| 中文字幕一区二区三区5566| 美女尤物国产一区| 三级黄色在线观看| 91麻豆精品国产| v片在线观看| 成人av男人的天堂| 黄色亚洲免费| 免费看黄色aaaaaa 片| 日韩欧美中文字幕在线播放| 日韩av视屏| 国产精品欧美在线| 久久五月天小说| 色姑娘综合天天| 亚洲国产中文字幕在线视频综合| 国产香蕉在线观看| 欧美在线视频播放| av在线不卡免费观看| 日本免费色视频| 亚洲一线二线三线视频| 天天摸天天碰天天爽天天弄| 欧美在线影院在线视频| 精品国产一区探花在线观看| 538任你躁在线精品免费| 亚洲欧美国产高清| 女人18毛片一区二区三区| 热门国产精品亚洲第一区在线| 神马电影久久| 视频区 图片区 小说区| 亚洲第一在线综合网站| 欧美孕妇孕交xxⅹ孕妇交| 国产精品视频网址| 午夜激情一区| 欧美 变态 另类 人妖| 精品视频在线免费看| 污视频在线免费观看网站| 激情伦成人综合小说| 蜜桃av一区二区三区电影| 加勒比av在线播放| 亚洲女人被黑人巨大进入al| 国产成人福利夜色影视| 国产一区二区三区乱码| 国产日韩av一区| 乱色精品无码一区二区国产盗| 欧美中文字幕精品| 91精品91| 午夜精产品一区二区在线观看的| 91精品国产手机| 不卡av影片| 国产91在线亚洲| 亚洲国产精品国自产拍av| 丰满人妻一区二区三区免费| 国产精品亚洲美女av网站| 精品二区久久| 亚洲国产精品一区二区久久hs| 精品亚洲国产视频| 国产精品亚洲欧美一级在线| 黄色av免费在线播放| 亚洲国产精品久久不卡毛片|