温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

typescript中范型的示例分析

发布时间:2022-03-19 11:17:19 阅读:162 作者:小新 栏目:开发技术
开发者测试专用服务器限时活动,0元免费领,库存有限,领完即止! 点击查看>>

这篇文章给大家分享的是有关typescript中范型的示例分析的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。

范型

在定义泛型后,有两种方式使用,一种是传入泛型类型,另一种使用类型推断。

declare function fn<T>(arg: T): T// 定义一个泛型函数 
const fn1 fn<string>('hello')// 第一种方式,传入泛型类型 
string const fn2 fn(1)// 第二种方式,从参数 arg 传入的类型 number,来推断出泛型 T 的类型是 number

一个扁平数组结构建树形结构例子:

// 转换前数据 
const arr = [ 
{ id1parentId0name'test1'}, 
{ id2parentId1name'test2'}, 
{ id3parentId0name'test3'} 
]; 
// 转化后 
[ { id1parentId0name'test1', 
    childrenList: [ { id2parentId1name'test2'childrenList: [] } ] }, 
    { id3parentId0name'test3'childrenList: [] } 
]


interface Item { 
    idnumber; 
    parentIdnumber; 
    namestring; 
}

// 传入的 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'>(listItem[], optionsOptions<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 { 
    namestring; 
    agenumber; 
} 
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 = [stringnumber];

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


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

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

感谢各位的阅读!关于“typescript中范型的示例分析”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,让大家可以学到更多知识,如果觉得文章不错,可以把它分享出去让更多的人看到吧!

亿速云「云服务器」,即开即用、新一代英特尔至强铂金CPU、三副本存储NVMe SSD云盘,价格低至29元/月。点击查看>>

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI

开发者交流群×