精品欧美一区二区三区在线观看 _久久久久国色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)

色综合视频一区二区三区日韩| 毛片免费在线| 伊人久久大香线蕉综合热线 | 欧美激情99| 色网综合在线观看| 日本黄色a视频| wwwav网站| 久久精品成人| 久久综合色影院| 中出视频在线观看| 久久亚洲精品中文字幕| 亚洲一区在线观看视频| 日韩精品电影网站| 亚洲第一天堂影院| 日韩精品91亚洲二区在线观看| 精品国偷自产在线视频99| 亚洲欧美综合视频| 国产精品美女午夜爽爽| 亚洲国产精品久久人人爱| 午夜精品区一区二区三| 亚洲精品国产av| 美日韩一级片在线观看| 91高清视频在线免费观看| 四虎成人免费影院| 久久久亚洲欧洲日产| 欧美日韩另类一区| 男人天堂1024| 女囚岛在线观看| 国产精品私人自拍| 美乳视频一区二区| 亚洲成人第一区| 精品一区二区三区蜜桃| 浅井舞香一区二区| 国产主播在线观看| 中文字幕乱码亚洲无线精品一区 | 国产欧美一区二区三区在线 | 欧美综合一区二区| 久激情内射婷内射蜜桃| 在线黄色网页| 国产精品人成在线观看免费| 国产日韩欧美二区| 精品人妻一区二区三区麻豆91| 蜜臀久久久99精品久久久久久| 性欧美xxxx交| 久久免费公开视频| 中文乱码免费一区二区三区下载| 中文字幕亚洲一区在线观看| 91精品人妻一区二区三区蜜桃欧美| 欧美久久亚洲| 91精品国产色综合久久久蜜香臀| 亚洲综合在线网站| 第84页国产精品| 欧美日韩色婷婷| 一女被多男玩喷潮视频| 超碰在线中文字幕| 亚洲电影在线播放| 日韩精品视频在线观看视频| 3d玉蒲团在线观看| 亚洲精品欧美激情| 男人的天堂视频在线| 高潮毛片在线观看| 亚洲欧美日韩系列| 做爰高潮hd色即是空| 日本中文字幕在线观看| 亚洲国产激情av| 亚洲ai欧洲av| 久久久久久国产精品免费无遮挡| 国产精品欧美一级免费| 亚洲aⅴ天堂av在线电影软件| jzzjzzjzz亚洲成熟少妇| 国产欧美一区二区三区鸳鸯浴| 茄子视频成人在线观看| 福利在线播放| 国产精品美女一区二区三区| 中文字幕在线亚洲三区| 最新国产在线拍揄自揄视频| 一区二区三区影院| 成人网站免费观看入口| 蜜桃视频在线观看免费视频| 日韩人在线观看| 亚欧在线免费观看| 四虎成人精品一区二区免费网站| 69堂精品视频| 精品人妻二区中文字幕| 欧美国产不卡| 国产一区二区精品丝袜| 成人欧美一区二区三区黑人一| 希岛爱理一区二区三区| 久久久久久国产精品美女| 日韩在线视频免费播放| 免费高清不卡av| 97伦理在线四区| 亚洲色偷精品一区二区三区| 国产蜜臀av在线一区二区三区| 亚洲天堂av免费在线观看| 久草在线资源站资源站| 欧美性猛交xxxx久久久| 色啦啦av综合| 精品网站aaa| 中文字幕日韩欧美| 久久综合色综合| 麻豆精品网站| 亚洲综合国产精品| 神马久久精品| 亚洲欧美日韩国产另类专区| 六月婷婷在线视频| 亚洲欧美久久精品| 日韩电影免费在线观看中文字幕 | 97久久精品人搡人人玩| 国内av在线播放| 国产成人在线视频播放| 欧美亚州在线观看| 日本不卡影院| 欧美日韩午夜在线视频| 亚洲自拍偷拍精品| 天天射成人网| 国产成人鲁鲁免费视频a| www.国产免费| 国产精品日日摸夜夜摸av| 国产午夜福利在线播放| 99视频这里有精品| 在线a欧美视频| 国产网站在线看| 黑人巨大精品欧美黑白配亚洲| 久久一区二区三区av| 影音先锋男人资源在线| 欧美亚洲一区二区在线| 久久久久麻豆v国产精华液好用吗| 视频在线不卡免费观看| 日本一欧美一欧美一亚洲视频| 成人av免费播放| 国产精品久久久久天堂| 午夜dv内射一区二区| 精品深夜福利视频| 欧美精品久久久久久久| 国产精品永久久久久久久久久| 久久久欧美精品sm网站| 玩弄中年熟妇正在播放| 91麻豆精品国产91久久久久推荐资源| 中文字幕在线看视频国产欧美| 在线观看免费av片| www.在线欧美| 国产精品入口芒果| 成人盗摄视频| 欧美国产中文字幕| av天堂一区二区三区| 国产精品电影一区二区| 男女视频在线看| 欧美久久精品一级c片| 日产精品99久久久久久| 欧美孕妇性xxxⅹ精品hd| 激情亚洲一区二区三区四区| 91传媒理伦片在线观看| 欧美人成在线| 国产精品我不卡| 91福利区在线观看| 精品国产乱码久久久久久久久| 国产精品久久久精品四季影院| 激情偷乱视频一区二区三区| 亚洲小说欧美另类激情| 国产精品久久久久久av公交车| 色777狠狠综合秋免鲁丝| 在线观看毛片网站| 亚洲欧洲韩国日本视频| 国产高清999| 午夜视频一区| 国产精品对白刺激久久久| 丁香高清在线观看完整电影视频| 精品处破学生在线二十三| 日韩毛片在线视频| 久久综合久久综合九色| aaa毛片在线观看| 成人系列视频| 亚洲a成v人在线观看| 性欧美videos高清hd4k| 亚洲电影天堂av| 亚洲精品中文字幕乱码三区91| 久久久99精品免费观看| 九九热99视频| 亚洲视频碰碰| 欧美午夜欧美| 亚洲精品成a人ⅴ香蕉片| 欧美日韩福利电影| 少妇激情av一区二区| 欧美三级韩国三级日本三斤| 成人免费毛片xxx| 不卡高清视频专区| 男女无套免费视频网站动漫| 欧美~级网站不卡| 久久亚洲一区二区| 日韩成人综合网| 久久久久久美女| av片在线看| 亚洲成人黄色在线| 中文字幕在线观看你懂的| 亚洲乱码日产精品bd| 黄色短视频在线观看| 久久99热99| 免费国产a级片| 欧美肥老太太性生活| 国产精品美女黄网| 亚洲资源在线| 欧美一区在线直播| 免费黄网在线观看| 日韩精品中文字| 国产三区在线播放| 在线看日韩精品电影| 久久亚洲av午夜福利精品一区| 久久免费精品国产久精品久久久久| 蜜臀一区二区三区精品免费视频| 亚洲综合国产| 日本香蕉视频在线观看| 久久国产中文字幕| 欧美日韩中文国产一区发布| 伊人精品综合| 成人激情视频小说免费下载| 都市激情亚洲一区| 欧美精品九九久久| 国产精品扒开做爽爽爽的视频| 亚洲欧美日韩精品久久| 国内爆初菊对白视频| 91精品国产91久久久久久一区二区| 亚洲大片免费观看| 亚洲国产aⅴ天堂久久| 日本不卡一区视频| 国产精品影视网| 毛片av免费在线观看| 国模一区二区三区| 在线视频精品一区| 岳的好大精品一区二区三区| 99视频免费观看| 国产激情一区| 国产精品久久二区| 黄色成人在线观看| 亚洲欧洲在线播放| 老牛影视av牛牛影视av| 在线不卡a资源高清| 波多野结衣绝顶大高潮| 五月婷婷综合激情| 18岁成人毛片| 国产精品视频第一区| 少妇精品一区二区三区| 粉嫩av一区二区三区在线播放| 91激情视频在线| 免费在线观看视频一区| 成人毛片一区二区| 亚洲一级电影| 你懂的av在线| 亚洲成人直播| 国产精品日韩三级| 欧美日本一区二区高清播放视频| 一区二区三区四区国产| 欧美精品色图| 欧美婷婷久久| 日韩欧美三级| 亚洲欧洲久久| 波多野结衣一区| 亚洲精品二区| 大片网站久久| 涩涩涩999| 久久高清精品| 亚洲精品乱码视频| 成人综合专区| 国产日韩一区欧美| 日韩欧美美女在线观看| 91成人伦理在线电影| 免费精品一区二区三区在线观看| 国产综合在线观看视频| 欧美第一在线视频| 成人午夜电影在线播放| xvideos.蜜桃一区二区| 免费精品视频一区| 国产麻豆精品久久| 天天综合狠狠精品| 欧美日韩中文字幕一区二区三区| 亚洲欧洲一二三| 国产高清欧美| 永久免费网站视频在线观看| 激情久久五月| www黄色日本| 玖玖精品视频| www激情五月| 成人黄色小视频在线观看| 中文在线观看免费视频| 国产日韩av一区二区| 亚洲人与黑人屁股眼交| 亚洲美女免费在线| 国产又黄又猛又粗又爽| 在线看国产一区| 亚洲天堂手机版| 亚洲精品一区二区三区四区高清| 无码精品黑人一区二区三区| 亚洲人成电影网站色…| 黄在线免费观看| 久久久久国产一区二区三区| 国产艳俗歌舞表演hd| 亚洲影视一区| 每日在线观看av| 天堂一区二区在线免费观看| 宇都宫紫苑在线播放| 91美女在线观看| 老司机福利在线观看| 亚洲夂夂婷婷色拍ww47| 人人爽人人爽人人片av| 欧美欧美欧美欧美首页| 天堂av在线免费| 中文字幕亚洲在线| 成人影院在线播放| 国产在线高清精品| 久久中文字幕导航| 亚洲美女搞黄| 香蕉精品999视频一区二区| 一级片视频免费观看| 成人av网址在线| 午夜爱爱毛片xxxx视频免费看| 天天综合色天天| 国产又大又黄的视频| 精品无人国产偷自产在线| 1区2区3区在线观看| 午夜精品一区二区三区视频免费看| 345成人影院| 成人性生交大片免费看小说| 午夜先锋成人动漫在线| 激情图片qvod| 美女任你摸久久| 一级欧美一级日韩片| 国产农村妇女精品| 亚洲男人第一av| 亚洲第一区中文99精品| 成人无遮挡免费网站视频在线观看| 2019日本中文字幕| 欧美深夜视频| 黄色污污在线观看| 日本视频免费一区| 双性尿奴穿贞c带憋尿| 欧美日韩美女视频| 丰满人妻一区二区三区免费| 日韩中文娱乐网| 国产资源一区| 秋霞毛片久久久久久久久| 欧美激情综合| wwwww在线观看| 中文字幕一区在线| 96日本xxxxxⅹxxx17| 国产午夜精品视频| 美女扒开腿让男人桶爽久久软| 俄罗斯精品一区二区三区| 一区二区三区午夜视频| 动漫av网站免费观看| 久久中文娱乐网| 日本一区二区网站| 日韩精品一区二区三区第95| 日韩欧美一起| 114国产精品久久免费观看| 欧美3p视频| 亚洲黄色a v| 久久久蜜臀国产一区二区| 丰满人妻老熟妇伦人精品| 日韩高清有码在线| 人人草在线视频| 久久99精品久久久久久水蜜桃| 国内一区二区三区| 最好看的中文字幕| 亚洲成人在线网站| 日本美女一级视频| 日本成熟性欧美| 国产91精品对白在线播放| 久久久久久www| 国产亚洲午夜高清国产拍精品| 日本中文字幕久久| 丝袜一区二区三区| www 久久久| 亚洲精品国产suv一区88| www.日韩大片| 97超碰人人干| 中文字幕亚洲无线码a| 亚洲色图图片| 久久久久久久9| 久久婷婷色综合| 国产精品第6页| 欧美成人午夜免费视在线看片| 日韩精品一区二区三区免费视频| 69精品丰满人妻无码视频a片| av网站一区二区三区| 亚洲乱码国产乱码精品| 亚洲一区二区黄| 午夜精品在线| 成人免费aaa| 中文字幕中文字幕在线一区| 99在线小视频| 欧美一区二区三区艳史| 青草国产精品| 欧美一级特黄aaa| 欧美日韩午夜激情| aaa日本高清在线播放免费观看| http;//www.99re视频| 亚洲在线成人| 三级在线观看免费大全| 日韩精品在线视频| 国内不卡的一区二区三区中文字幕|