加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 创业 > C语言 > 正文

typescript学习笔记--泛型(3)

发布时间:2020-12-15 00:41:21 所属栏目:C语言 来源:网络整理
导读:table class="javascript" tr class="li1" td class="ln"pre class="de1"1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60
<tr class="li1">
<td class="ln"><pre class="de1">1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61

identityarg any any ? ? arg ? 虽然使用any类型后这个函数已经能接收任何类型的arg参数, 但是却丢失了一些信息:传入的类型与返回的类型应该是相同的。 因此,我们需要一种方法使用返回值的类型与传入参数的类型是相同的。 这里,我们使用了类型变量,它是一种特殊的变量,只用于表示类型而不是值。 ? identityTarg T T ? ? arg ? 类型变量T帮助我们捕获用户传入的类型(比如:number),之后我们就可以使用这个类型。 之后我们再次使用了T当做返回值类型。现在我们可以知道参数类型与返回值类型是相同的了。 ? 二、使用泛型变量 使用泛型创建像identity这样的泛型函数时,编译器要求你在函数体必须正确的使用这个通用的类型。 换句话说,你必须把这些参数当做是任意或所有类型。 ? loggingIdentityTarg T T ? ? console.arg. ? ? ? arg ? 如果这么做,编译器会报错说我们使用了arg的.属性,但是没有地方指明arg具有这个属性。 记住,这些类型变量代表的是任意类型,所以使用这个函数的人可能传入的是个数字,而数字是没有.属性的。 ? loggingIdentityTarg ArrayT ArrayT ? ? console.arg. ? ? ? arg ? 你可以这样理解loggingIdentity的类型: 泛型函数loggingIdentity,接收类型参数T,和函数arg,它是个元素类型是T的数组,并返回元素类型是T的数组。 如果我们传入数字数组,将返回一个数字数组,因为此时T的的类型为number。 这可以让我们把泛型变量T当做类型的一部分使用,而不是整个类型,增加了灵活性。 ? 三、泛型约束 相比于操作any所有类型,我们想要限制函数去处理任意带有.属性的所有类型。 只要传入的类型有这个属性,我们就允许,就是说至少包含这一属性。 为此,我们定义一个接口来描述约束条件。 创建一个包含.属性的接口,使用这个接口和关键字还实现约束: ? Lengthwise ? ? length number ? loggingIdentityT Lengthwisearg T T ? ? console.arg. ? ? ? arg ? 现在这个泛型函数被定义了约束,因此它不再是适用于任意类型: 我们需要传入符合约束类型的值,必须包含必须的属性: loggingIdentitylength value ? ?(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

<table class="javascript">

    推荐文章
      热点阅读