91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

typescript中范型的示例分析

發布時間:2022-03-19 11:17:19 來源:億速云 閱讀:148 作者:小新 欄目:開發技術

這篇文章給大家分享的是有關typescript中范型的示例分析的內容。小編覺得挺實用的,因此分享給大家做個參考,一起跟隨小編過來看看吧。

范型

在定義泛型后,有兩種方式使用,一種是傳入泛型類型,另一種使用類型推斷。

declare function fn<T>(arg: T): T; // 定義一個泛型函數 
const fn1 = fn<string>('hello'); // 第一種方式,傳入泛型類型 
string const fn2 = fn(1); // 第二種方式,從參數 arg 傳入的類型 number,來推斷出泛型 T 的類型是 number

一個扁平數組結構建樹形結構例子:

// 轉換前數據 
const arr = [ 
{ id: 1, parentId: 0, name: 'test1'}, 
{ id: 2, parentId: 1, name: 'test2'}, 
{ id: 3, parentId: 0, name: 'test3'} 
]; 
// 轉化后 
[ { id: 1, parentId: 0, name: 'test1', 
    childrenList: [ { id: 2, parentId: 1, name: 'test2', childrenList: [] } ] }, 
    { id: 3, parentId: 0, name: 'test3', childrenList: [] } 
]


interface Item { 
    id: number; 
    parentId: number; 
    name: string; 
}

// 傳入的 options 參數中,得到 childrenKey 的類型,然后再傳給 TreeItem

interface Options<T extends string> { 
    childrenKey: T; 
} 
type TreeItem<T extends string> = Item & { [key in T]: TreeItem<T>[] | [] }; 
declare function listToTree<T extends string = 'children'>(list: Item[], options: Options<T>): TreeItem<T>[]; 
listToTree(arr, { childrenKey: 'childrenList' }).forEach(i => i.childrenList)

infer

表示在 extends 條件語句中待推斷的類型變量。

type ParamType<T> = T extends (param: infer P) => any ? P : T;

這句話的意思是:如果 T 能賦值給 (param: infer P) => any,則結果是 (param: infer P) => any 類型中的參數 P,否則返回為 T。

interface User { 
    name: string; 
    age: number; 
} 
type Func = (user: User) => void 
type Param = ParamType<Func>; // Param = User 
type AA = ParamType<string>; // string

例子:

// [string, number] -> string | number
type ElementOf<T> = T extends Array<infer E> ? E : never;

type TTuple = [string, number];

type ToUnion = ElementOf<TTuple>; // string | number


// T1 | T2 -> T1 & T2
type UnionToIntersection<U> = (U extends any ? (k: U) => void : never) extends ((k: infer I) => void) ? I : never;

type Result = UnionToIntersection<T1 | T2>; // T1 & T2

感謝各位的閱讀!關于“typescript中范型的示例分析”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,讓大家可以學到更多知識,如果覺得文章不錯,可以把它分享出去讓更多的人看到吧!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

永丰县| 铅山县| 盐池县| 邛崃市| 阿拉善盟| 奈曼旗| 广平县| 吴江市| 盖州市| 河西区| 清丰县| 子洲县| 修武县| 灵川县| 大庆市| 绍兴市| 东山县| 罗江县| 卓尼县| 曲麻莱县| 光泽县| 黄梅县| 绥阳县| 班玛县| 贡嘎县| 洛川县| 兴安盟| 星座| 牡丹江市| 洪泽县| 乾安县| 涞水县| 封开县| 宜阳县| 绍兴县| 若羌县| 平昌县| 砀山县| 昭苏县| 广宁县| 元江|