亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

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

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

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

徐闻县| 海林市| 汉寿县| 宣汉县| 庄浪县| 贡山| 恩施市| 济南市| 油尖旺区| 顺昌县| 治多县| 桦南县| 利川市| 重庆市| 格尔木市| 平潭县| 宜阳县| 北碚区| 元谋县| 新龙县| 威远县| 麻江县| 和平县| 老河口市| 即墨市| 常州市| 乌拉特前旗| 云安县| 临泉县| 前郭尔| 平利县| 柘荣县| 吴忠市| 虹口区| 丰宁| 孟州市| 商洛市| 新民市| 田东县| 淳化县| 平遥县|