6. ts中的泛型

  • <T> 泛型的作用:編寫的時(shí)候不確定類型,當(dāng)調(diào)用時(shí)確定類型

1. 單個(gè)泛型

  • 聲明的時(shí)候需要用 <> 包裹起來
function createArray<T>(times: number, value: T): Array<T>{  // 根據(jù)對(duì)應(yīng)參數(shù)的類型給T賦值
    let result = []
    for(let i = 0; i< times; i++){
        result.push(value)     
    }
    return result
}

let r = createArray(5, 'abc')
let r2 = createArray(5, 333)

2. 多個(gè)泛型

// 元組進(jìn)行類型交換
const swap = <T, K>(tuple: [T, K]): [K, T] => { // 元組是特殊的數(shù)組
    return [tuple[1], tuple[0]]
}
let r = swap([{}, 'xx']); // => [123,'abc']  我能確定只有兩項(xiàng)

3. 函數(shù)標(biāo)注的方式

  • 類型別名
// 如果泛型不傳參是unkown類型
type ICreateArray = <T>(x: number, y: T) => Array<T>;
const createArray: ICreateArray = <T>(times: number, value: T): Array<T> => {
    let result = [];
    for (let i = 0; i < times; i++) {
        result.push(value)
    }
    return result
}
createArray(3, 'abc');
  • 接口
interface ISum<T> { // 這里的 T 是使用接口的時(shí)候傳入
    <U>(a: T, b: T): U // 這里的 U 是調(diào)用函數(shù)的時(shí)候傳入
}
let sum: ISum<number> = (a:number, b:number) => {
    return 3 as any
}

4. 默認(rèn)泛型

  • 可以指定泛型的默認(rèn)類型,方便使用
interface T2<T = string>{
    name:T
}
type T22 = T2;
let name1:T22 = {name: 'Tom'}

5. 泛型約束

  • 主要強(qiáng)調(diào)類型中必須包含某個(gè)屬性
// extends 約束,keyof 取當(dāng)前類型的key,typeof 取當(dāng)前值的類型
type withLen = { length: number }
const computeArrayLength = <T extends withLen, K extends withLen>(arr1: T, arr2: K): number => {
    return arr1.length + arr2.length
}
computeArrayLength('123', { length: 3 })  // 字符串有l(wèi)ength屬性
// computeArrayLength( 123, { length: 3 })  // 編譯不通過澈驼,類型“number”的參數(shù)不能賦給類型“withLen”的參數(shù),number沒有l(wèi)ength屬性
const getVal = <T extends object, K extends keyof T>(obj: T, key: K) => {
    if (typeof obj !== 'object') {
        return
    }
}
type T1= keyof { a: 1, b: 2 };
type T2 = keyof string;
type T3 = keyof any; // string  |number | symbol

getVal({ a: 1, b: 2 }, 'a')

6. 類中的泛型

class GetArrayMax<T = number> { // [1,2,3] [a,b,c]
    public arr: T[] = [];
    add(val: T) {
        this.arr.push(val)
    }
    getMax():T {
        let arr = this.arr;
        let max = arr[0];
        for (let i = 1; i < arr.length; i++) {
            arr[i] > max ? max = arr[i] : null
        }
        return max;
    }
}
let arr = new GetArrayMax(); // 泛型只有當(dāng)使用后才知道具體的類型
arr.add(1);
arr.add(2)
arr.add(3)
let r = arr.getMax()
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市炊昆,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖凤巨,帶你破解...
    沈念sama閱讀 218,284評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件视乐,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡敢茁,警方通過查閱死者的電腦和手機(jī)佑淀,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,115評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來彰檬,“玉大人伸刃,你說我怎么就攤上這事》瓯叮” “怎么了捧颅?”我有些...
    開封第一講書人閱讀 164,614評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)瓶堕。 經(jīng)常有香客問我隘道,道長(zhǎng),這世上最難降的妖魔是什么郎笆? 我笑而不...
    開封第一講書人閱讀 58,671評(píng)論 1 293
  • 正文 為了忘掉前任谭梗,我火速辦了婚禮,結(jié)果婚禮上宛蚓,老公的妹妹穿的比我還像新娘激捏。我一直安慰自己,他們只是感情好凄吏,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,699評(píng)論 6 392
  • 文/花漫 我一把揭開白布远舅。 她就那樣靜靜地躺著,像睡著了一般痕钢。 火紅的嫁衣襯著肌膚如雪图柏。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,562評(píng)論 1 305
  • 那天任连,我揣著相機(jī)與錄音蚤吹,去河邊找鬼。 笑死随抠,一個(gè)胖子當(dāng)著我的面吹牛裁着,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播拱她,決...
    沈念sama閱讀 40,309評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼二驰,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了秉沼?” 一聲冷哼從身側(cè)響起桶雀,我...
    開封第一講書人閱讀 39,223評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤矿酵,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后背犯,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體坏瘩,經(jīng)...
    沈念sama閱讀 45,668評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡盅抚,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,859評(píng)論 3 336
  • 正文 我和宋清朗相戀三年漠魏,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片妄均。...
    茶點(diǎn)故事閱讀 39,981評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡柱锹,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出丰包,到底是詐尸還是另有隱情禁熏,我是刑警寧澤,帶...
    沈念sama閱讀 35,705評(píng)論 5 347
  • 正文 年R本政府宣布邑彪,位于F島的核電站瞧毙,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏寄症。R本人自食惡果不足惜宙彪,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,310評(píng)論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望有巧。 院中可真熱鬧释漆,春花似錦、人聲如沸篮迎。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,904評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽甜橱。三九已至逊笆,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間岂傲,已是汗流浹背难裆。 一陣腳步聲響...
    開封第一講書人閱讀 33,023評(píng)論 1 270
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留譬胎,地道東北人差牛。 一個(gè)月前我還...
    沈念sama閱讀 48,146評(píng)論 3 370
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像堰乔,于是被迫代替她去往敵國(guó)和親偏化。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,933評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容