type-tls 2.4.1 → 2.4.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (71) hide show
  1. package/README.md +9 -3
  2. package/dist/index.d.ts +466 -6
  3. package/dist/tsdoc-metadata.json +1 -1
  4. package/dist/type-tls.d.ts +30 -18
  5. package/dist/type-tls.iife.js +1 -1
  6. package/dist/type-tls.mjs +180 -0
  7. package/dist/type-tls.umd.js +1 -1
  8. package/doc/{index.md → api/index.md} +1 -1
  9. package/doc/{type-tls.anyfunction.md → api/type-tls.anyfunction.md} +0 -0
  10. package/doc/{type-tls.classtype._new_.md → api/type-tls.classtype._new_.md} +0 -0
  11. package/doc/{type-tls.classtype.md → api/type-tls.classtype.md} +0 -0
  12. package/doc/{type-tls.createdefinemixin.md → api/type-tls.createdefinemixin.md} +0 -0
  13. package/doc/{type-tls.createextendtarget.md → api/type-tls.createextendtarget.md} +0 -0
  14. package/doc/{type-tls.createmixintarget.md → api/type-tls.createmixintarget.md} +0 -0
  15. package/doc/{type-tls.createtargetextend.md → api/type-tls.createtargetextend.md} +0 -0
  16. package/doc/{type-tls.createtargetmixin.md → api/type-tls.createtargetmixin.md} +0 -0
  17. package/doc/{type-tls.defineextend.md → api/type-tls.defineextend.md} +0 -0
  18. package/doc/{type-tls.definemixin.md → api/type-tls.definemixin.md} +0 -0
  19. package/doc/{type-tls.exacttype.md → api/type-tls.exacttype.md} +0 -0
  20. package/doc/{type-tls.exacttypename.md → api/type-tls.exacttypename.md} +0 -0
  21. package/doc/{type-tls.extendtarget.md → api/type-tls.extendtarget.md} +0 -0
  22. package/doc/{type-tls.getexacttypenameof.md → api/type-tls.getexacttypenameof.md} +0 -0
  23. package/doc/{type-tls.getexacttypeof.md → api/type-tls.getexacttypeof.md} +0 -0
  24. package/doc/{type-tls.getnameoftype.md → api/type-tls.getnameoftype.md} +0 -0
  25. package/doc/{type-tls.gettypebyname.md → api/type-tls.gettypebyname.md} +0 -0
  26. package/doc/{type-tls.gettypenameof.md → api/type-tls.gettypenameof.md} +0 -0
  27. package/doc/{type-tls.gettypeof.md → api/type-tls.gettypeof.md} +0 -0
  28. package/doc/{type-tls.isanonymousfunction.md → api/type-tls.isanonymousfunction.md} +0 -0
  29. package/doc/{type-tls.isarraylike.md → api/type-tls.isarraylike.md} +0 -0
  30. package/doc/{type-tls.isarrowfunction.md → api/type-tls.isarrowfunction.md} +0 -0
  31. package/doc/{type-tls.isasyncfunction.md → api/type-tls.isasyncfunction.md} +0 -0
  32. package/doc/{type-tls.isasyncgeneratorfunction.md → api/type-tls.isasyncgeneratorfunction.md} +0 -0
  33. package/doc/{type-tls.isbasetype.md → api/type-tls.isbasetype.md} +0 -0
  34. package/doc/{type-tls.isgeneratorfunction.md → api/type-tls.isgeneratorfunction.md} +0 -0
  35. package/doc/{type-tls.isidentifier.md → api/type-tls.isidentifier.md} +0 -0
  36. package/doc/{type-tls.isiterable.md → api/type-tls.isiterable.md} +0 -0
  37. package/doc/{type-tls.isiterator.md → api/type-tls.isiterator.md} +0 -0
  38. package/doc/{type-tls.isobject.md → api/type-tls.isobject.md} +0 -0
  39. package/doc/api/type-tls.keyofvalue.md +15 -0
  40. package/doc/{type-tls.loosetype.md → api/type-tls.loosetype.md} +0 -0
  41. package/doc/{type-tls.loosetypename.md → api/type-tls.loosetypename.md} +0 -0
  42. package/doc/{type-tls.md → api/type-tls.md} +8 -1
  43. package/doc/{type-tls.methodparams.md → api/type-tls.methodparams.md} +0 -0
  44. package/doc/{type-tls.methodreturntype.md → api/type-tls.methodreturntype.md} +0 -0
  45. package/doc/{type-tls.mixin_4.md → api/type-tls.mixin_4.md} +0 -0
  46. package/doc/{type-tls.mixintarget.md → api/type-tls.mixintarget.md} +0 -0
  47. package/doc/{type-tls.optional.md → api/type-tls.optional.md} +0 -0
  48. package/doc/{type-tls.optionalboolean.md → api/type-tls.optionalboolean.md} +0 -0
  49. package/doc/{type-tls.privatememberofextend._constructor.md → api/type-tls.privatememberofextend._constructor.md} +0 -0
  50. package/doc/{type-tls.privatememberofextend.md → api/type-tls.privatememberofextend.md} +0 -0
  51. package/doc/{type-tls.replace.md → api/type-tls.replace.md} +0 -0
  52. package/doc/{type-tls.replacenull.md → api/type-tls.replacenull.md} +0 -0
  53. package/doc/{type-tls.replaceundefined.md → api/type-tls.replaceundefined.md} +0 -0
  54. package/doc/{type-tls.replacevoid.md → api/type-tls.replacevoid.md} +0 -0
  55. package/doc/{type-tls.resolvedata.md → api/type-tls.resolvedata.md} +0 -0
  56. package/doc/{type-tls.targetextend.md → api/type-tls.targetextend.md} +0 -0
  57. package/doc/{type-tls.targetmixin.md → api/type-tls.targetmixin.md} +0 -0
  58. package/doc/{type-tls.typeofreturntype.md → api/type-tls.typeofreturntype.md} +0 -0
  59. package/doc/{type-tls.waitasyncable.md → api/type-tls.waitasyncable.md} +0 -0
  60. package/doc/{type-tls.waitasyncablecallback.md → api/type-tls.waitasyncablecallback.md} +4 -2
  61. package/doc/{type-tls.waitasyncablereturn.md → api/type-tls.waitasyncablereturn.md} +0 -0
  62. package/doc//346/225/231/347/250/213.md +7 -0
  63. package/package.json +13 -13
  64. package/dist/async.d.ts +0 -31
  65. package/dist/base.d.ts +0 -184
  66. package/dist/buffer.d.ts +0 -1
  67. package/dist/extend.d.ts +0 -86
  68. package/dist/function.d.ts +0 -49
  69. package/dist/member.d.ts +0 -16
  70. package/dist/mixin.d.ts +0 -96
  71. package/dist/type-tls.es.js +0 -171
package/README.md CHANGED
@@ -1,4 +1,5 @@
1
- [API接口文档]: ./doc/index.md
1
+ [教程]: ./doc/教程.md
2
+ [API接口文档]: ./doc/api/index.md
2
3
 
3
4
  [GitHub仓库]: https://github.com/GuoBinyong/type-tls
4
5
  [发行地址]: https://github.com/GuoBinyong/type-tls/releases
@@ -14,7 +15,8 @@
14
15
  - [2. 安装方式](#2-安装方式)
15
16
  - [2.1. 方式1:通过 npm 安装](#21-方式1通过-npm-安装)
16
17
  - [2.2. 方式3:通过`<script>`标签引入](#22-方式3通过script标签引入)
17
- - [3. API接口文档](#3-api接口文档)
18
+ - [3. 教程](#3-教程)
19
+ - [4. API接口文档](#4-api接口文档)
18
20
 
19
21
 
20
22
 
@@ -46,6 +48,7 @@
46
48
 
47
49
 
48
50
  ## 2.1. 方式1:通过 npm 安装
51
+ 通过 npm (或 yarn、pnpm 等包管理器)安装
49
52
  ```
50
53
  npm install type-tls
51
54
  ```
@@ -69,7 +72,10 @@ npm install type-tls
69
72
  </script>
70
73
  ```
71
74
 
72
- # 3. API接口文档
75
+ # 3. 教程
76
+ 详情跳转至[教程][]
77
+
78
+ # 4. API接口文档
73
79
  详情跳转至[API接口文档][]
74
80
 
75
81
 
package/dist/index.d.ts CHANGED
@@ -1,6 +1,466 @@
1
- export * from './base';
2
- export * from './mixin';
3
- export * from './extend';
4
- export * from './function';
5
- export * from './member';
6
- export * from './async';
1
+ /**
2
+ * 处理类型相关的工具
3
+ * @remarks
4
+ * type-tls 封装了与类型相关的工具,比如获取数据的类型 或 类型名字、判断数据的类型 等
5
+ *
6
+ * @packageDocumentation
7
+ */
8
+ /**
9
+ * 判断目标是否是对象类型
10
+ *
11
+ * @remarks
12
+ * 仅通过 target instanceof Object 判断是不行的,因为 对于 Object.create(null) 创建的对象 通过 ` Object.create(null) instanceof Object ` 来判断 返回的是 false
13
+ * 即:通过 Object.create(null) 创建的对象是不被 instanceof 认为是继续于 Object 的
14
+ *
15
+ * typeof null 也返回 "object"
16
+ *
17
+ * @param target : any 目标对象
18
+ */
19
+ export declare function isObject(target: any): boolean;
20
+ /**
21
+ * typeof 的返回类型
22
+ */
23
+ export declare type TypeOfReturnType = "string" | "number" | "bigint" | "boolean" | "symbol" | "undefined" | "object" | "function";
24
+ /**
25
+ * 宽松的类型
26
+ */
27
+ export declare type LooseType = undefined | null | Function | "object";
28
+ /**
29
+ * 宽松类型的字符串表示
30
+ */
31
+ export declare type LooseTypeName = "undefined" | "null" | "Function" | "object" | string;
32
+ /**
33
+ * 精确类型
34
+ *
35
+ * @remarks
36
+ * 在精准类型中认为 JavaScript 的原始类型(非对象类型) 与 其对应的 包装类型(类类型)是不同的类型,即:
37
+ * number 和 Number、string 和 String、boolean 和 Boolean 等 是不同的类型;
38
+ * 对于原始类型,返回的结果 会与 typeof 返回的结果一样;
39
+ * 但,对于 undefined 和 null 会返回其自身值(即 undefined 和 null)作为类型值
40
+ *
41
+ * 各种类型的值 与 该方法的返回值 的映射如下:
42
+ * ```
43
+ * undefined :undefined
44
+ * null : null
45
+ * string : "string"
46
+ * number : "number"
47
+ * bigint : "bigint"
48
+ * boolean : "boolean"
49
+ * symbol : "symbol"
50
+ * function : Function
51
+ * 没有原型的对象(如:通过 `Object.create(null)` 创建的对象) : "object"
52
+ * 其它任何类型的实例 : 返回该实例的构造函数
53
+ * ```
54
+ */
55
+ export declare type ExactType = LooseType | Exclude<TypeOfReturnType, "undefined" | "function" | "object">;
56
+ /**
57
+ * 精确类型的字符串表示
58
+ *
59
+ * @remarks
60
+ * 在精准类型中认为 JavaScript 的原始类型(非对象类型) 与 其对应的 包装类型(类类型)是不同的类型,即:
61
+ * number 和 Number、string 和 String、boolean 和 Boolean 等 是不同的类型;
62
+ * 对于原始类型,返回的结果 会与 typeof 返回的结果一样;
63
+ * 但,对于 null 会返回 "null"
64
+ *
65
+ * 各种类型的值 与 该方法的返回值 的映射如下:
66
+ * ```
67
+ * undefined :"undefined"
68
+ * null : "null"
69
+ * function : "Function"
70
+ * string : "string"
71
+ * number : "number"
72
+ * bigint : "bigint"
73
+ * boolean : "boolean"
74
+ * symbol : "symbol"
75
+ * 没有原型的对象(如:通过 Object.create(null) 创建的对象) : "object"
76
+ * 其它任何类型的实例 : 返回该实例的构造函数的名字
77
+ * ```
78
+ */
79
+ export declare type ExactTypeName = LooseTypeName | Exclude<TypeOfReturnType, "undefined" | "function" | "object">;
80
+ /**
81
+ * 获取 inst 的宽松类型
82
+ *
83
+ * @remarks
84
+ * 注意:
85
+ * 本方法返回的结果如下:
86
+ * ```
87
+ * undefined :undefined
88
+ * null : null
89
+ * function : Function
90
+ * 没有原型的对象(如:通过 Object.create(null) 创建的对象) : "object"
91
+ * 其它任何类型的实例 : 返回该实例的构造函数 或 包装对象的构造函数
92
+ * ```
93
+ *
94
+ *
95
+ * @param inst
96
+ * @returns inst 的类型
97
+ */
98
+ export declare function getTypeOf(inst: any): LooseType;
99
+ /**
100
+ * 获取 类型的字符串表示
101
+ *
102
+ * @param t - 一个 ExactType 类型的值
103
+ * @return t 的字符串表示的类型
104
+ */
105
+ export declare function getNameOfType(t: ExactType): ExactTypeName;
106
+ /**
107
+ * 根据类型的名字获取其对应的类
108
+ * @param typeName - 类型的名字
109
+ */
110
+ export declare function getTypeByName(typeName: string): Function | undefined;
111
+ /**
112
+ * 获取 inst 的类型字符串
113
+ *
114
+ * @remarks
115
+ * 注意:
116
+ * 本方法返回的结果如下:
117
+ * undefined :"undefined"
118
+ * null : "null"
119
+ * 没有原型的对象(如:通过 Object.create(null) 创建的对象) : "object"
120
+ * 其它任何类型的实例 : 返回该实例的构造函数 或 包装对象的构造函数 的函数名字
121
+ *
122
+ * @param inst
123
+ * @returns inst 的类型字符串
124
+ */
125
+ export declare function getTypeNameOf(inst: any): LooseTypeName;
126
+ /**
127
+ * 获取 inst 的精确类型
128
+ * @param inst
129
+ * @returns inst 的类型
130
+ */
131
+ export declare function getExactTypeOf(inst: any): ExactType;
132
+ /**
133
+ * 获取 inst 的精确类型的字符串表示
134
+ * @param inst
135
+ * @returns inst 的类型字符串
136
+ */
137
+ export declare function getExactTypeNameOf(inst: any): ExactTypeName;
138
+ /**
139
+ * 判断 data 是否是 基本类型
140
+ * @remarks
141
+ * 基本类型 是指 那些不是 对象类型的类型,即,除了 object 和 function 类型以外,其它的都是基本类型,null 也算怎是 基本类型
142
+ * @param data - 任意类型的值
143
+ */
144
+ export declare function isBaseType(data: any): boolean;
145
+ /**
146
+ * 判断 target 是否为 类数组对象
147
+ * @param target - 目标
148
+ * @returns
149
+ */
150
+ export declare function isArrayLike(target: any): boolean;
151
+ /**
152
+ * 判断 目标 是否是可迭代的对象,即 实现了 可迭代协议
153
+ * @param target - 目标
154
+ */
155
+ export declare function isIterable(target: any): boolean;
156
+ /**
157
+ * 判断 目标 是否是迭代器,即 实现了 迭代器协议
158
+ * @param target - 目标
159
+ */
160
+ export declare function isIterator(target: any): boolean;
161
+ /**
162
+ * 将某个类型变为可选的类型
163
+ */
164
+ export declare type Optional<T> = T | null | undefined;
165
+ /**
166
+ * 可选的布尔类型
167
+ */
168
+ export declare type OptionalBoolean = Optional<boolean>;
169
+ /**
170
+ * 获取值类型为指定类型的所有 key
171
+ */
172
+ export declare type KeyOfValue<Target, Value> = {
173
+ [K in keyof Target]: Target[K] extends Value ? K : never;
174
+ }[keyof Target];
175
+ /**
176
+ * 可将源类型 SourType 中的 类型 MatchType 替换为 新的类型 NewType
177
+ */
178
+ export declare type Replace<SourType, MatchType, NewType> = SourType extends MatchType ? NewType : SourType;
179
+ /**
180
+ * 可将源类型 SourType 中的 undefined 替换为 新的类型 NewType
181
+ */
182
+ export declare type ReplaceUndefined<SourType, NewType> = Replace<SourType, undefined, NewType>;
183
+ /**
184
+ * 可将源类型 SourType 中的 null 替换为 新的类型 NewType
185
+ */
186
+ export declare type ReplaceNull<SourType, NewType> = Replace<SourType, null, NewType>;
187
+ /**
188
+ * 可将源类型 SourType 中的代表空的类型 void | undefined | null 替换为 新的类型 NewType
189
+ */
190
+ export declare type ReplaceVoid<SourType, NewType> = Replace<SourType, void | undefined | null, NewType>;
191
+ /**
192
+ * 混合
193
+ * @internal
194
+ */
195
+ export declare function mixin<T, S>(target: T, source: S): T & S;
196
+ /**
197
+ * 混合
198
+ * @internal
199
+ */
200
+ export declare function mixin<T, S1, S2>(target: T, source1: S1, source2: S2): T & S1 & S2;
201
+ /**
202
+ * 混合
203
+ * @internal
204
+ */
205
+ export declare function mixin<T, S1, S2, S3>(target: T, source1: S1, source2: S2, source3: S3): T & S1 & S2 & S3;
206
+ /**
207
+ * 混合
208
+ * @internal
209
+ */
210
+ export declare function mixin<T, S1, S2, S3, S4>(target: T, source1: S1, source2: S2, source3: S3, source4: S3): T & S1 & S2 & S3 & S4;
211
+ /**
212
+ * 混合
213
+ *
214
+ * @remarks
215
+ * 将 source 的所有成员混入 target 对象中。
216
+ *
217
+ * 与 `Object.assign()` 的功能类似,不同的是 `mixin()` 会在 target 对象中 保持 source 对象属性的 PropertyDescriptors
218
+ *
219
+ * @param target - 目标对象,所有 源对象 的属性都要被混入进到 目标对象中
220
+ * @param sources - 源对象,所有 源对象 的属性都要被混入进到 目标对象中
221
+ * @returns 混入后的 target
222
+ */
223
+ export declare function mixin(target: any, ...sources: any[]): any;
224
+ /**
225
+ * 定义混合的类型便利函数
226
+ *
227
+ * @remarks
228
+ * 它会更改 mixin 中方法的this指向为 target & mixin,不会真的执行混合操作
229
+ *
230
+ * @param target - 混合的目标,用作 this 的类型
231
+ * @param mixin - 混合对象,会自动更改其this的类型
232
+ * @returns 返回注入了 this 类型的 mixin 对象本身
233
+ */
234
+ export declare function defineMixin<T, M>(target: T, mixin: M & ThisType<T & M>): M & ThisType<T & M>;
235
+ /**
236
+ * 创建定义混合的类型便利函数
237
+ *
238
+ * @remarks
239
+ * 它返回的便利函数的功能与 {@link defineMixin} 的功能一样,唯一区别是不再需要接收 target 参数了
240
+ *
241
+ * @returns 可以用于 定义混合的 类型便利函数
242
+ */
243
+ export declare function createDefineMixin<T>(): <M>(target: T, mixin: M & ThisType<T & M>) => M & ThisType<T & M>;
244
+ /**
245
+ * 混合目标
246
+ *
247
+ * @remarks
248
+ * 与 {@link defineMixin} 的区别是:`targetMixin` 会执行对 target 的混合操作,而 {@link defineMixin} 不会
249
+ *
250
+ *
251
+ * @param target - 混合的目标,用作 this 的类型
252
+ * @param m - 混合对象,会自动更改其this的类型
253
+ * @returns 返回注入了 this 类型的 mixin 对象本身
254
+ */
255
+ export declare function targetMixin<T, M>(target: T, m: M & ThisType<T & M>): M & ThisType<T & M>;
256
+ /**
257
+ * 创建用于混合目标的便捷函数
258
+ *
259
+ * @remarks
260
+ * 它返回的便利函数的功能与 {@link targetMixin} 的功能一样,唯一区别是不再需要接收 target 参数了
261
+ *
262
+ * @param target - 混合的目标,用作 this 的类型
263
+ * @returns 可以用于 混合目标 的便利函数
264
+ */
265
+ export declare function createTargetMixin<T>(target: T): <M>(m: M & ThisType<T & M>) => M & ThisType<T & M>;
266
+ /**
267
+ * 混合目标
268
+ *
269
+ * @remarks
270
+ * 会执行对 CEarth 类的扩展操作。
271
+ * 与 {@link targetMixin} 的区别仅仅是返回类型不一样。
272
+ *
273
+ * @param target - 混合的目标,用作 this 的类型
274
+ * @param m - 混合对象,会自动更改其this的类型
275
+ * @returns 返回混合后的 target 对象
276
+ */
277
+ export declare function mixinTarget<T, M>(target: T, m: M & ThisType<T & M>): M & ThisType<T & M> & T;
278
+ /**
279
+ * 创建用于混合目标工具函数
280
+ *
281
+ * @remarks
282
+ * 它返回的便利函数的功能与 {@link mixinTarget} 的功能一样,唯一区别是不再需要接收 target 参数了
283
+ *
284
+ * @returns 可以用于 混合目标 的便利函数
285
+ */
286
+ export declare function createMixinTarget<T>(target: T): <M>(m: M & ThisType<T & M>) => M & ThisType<T & M> & T;
287
+ /**
288
+ * 类的类型、构造函数的类型
289
+ *
290
+ * @typeParam Arg - 构建函数的参数类型
291
+ * @typeParam Instance - 构建函数的返回的实例类型
292
+ */
293
+ export interface ClassType<Arg extends any[] = any[], Instance = any> {
294
+ new (...args: Arg): Instance;
295
+ }
296
+ /**
297
+ * 用于定义扩展选项中的私有成员
298
+ */
299
+ export interface PrivateMemberOfExtend<TargetType extends new (...args: any) => any> {
300
+ /**
301
+ * 扩展类中用于定义在创建实例时的初始化的方法
302
+ * @remarks
303
+ * 该方法会在创建实例时自动执行,并将构建函数接收到的参数透传给方方法。
304
+ *
305
+ * 注意:
306
+ * _constructor 会被保存在 目标类中的 _constructors 属性中,它是一个数组。
307
+ *
308
+ * 目标类 需要在自己的构建函数中逐个调用 cla._constructors 中的函数
309
+ *
310
+ * @param args
311
+ */
312
+ _constructor?: (...args: (TargetType extends new (...args: infer A) => any ? A : never)) => void;
313
+ }
314
+ /**
315
+ * 定义扩展的类型便利函数
316
+ *
317
+ * @remarks
318
+ * 它会更改 ext 中方法的this指向为 cla & ext,不会真的执行扩展操作。
319
+ *
320
+ * 其中 ext._constructor 会被保存在 cla._constructors 属性中,它是一个数组。
321
+ *
322
+ * cla 需要在自己的构建函数中逐个调用 cla._constructors 中的函数
323
+ *
324
+ * @param cla - 扩展的目标,用作 this 的类型
325
+ * @param ext - 描述扩展内容的对象,会自动更改其this的类型
326
+ * @returns 返回注入了 this 类型的 ext 对象本身
327
+ */
328
+ export declare function defineExtend<C extends ClassType, E>(cla: C, ext: E & ThisType<InstanceType<C> & E> & PrivateMemberOfExtend<C>): E & ThisType<C & E>;
329
+ /**
330
+ * 扩展目标
331
+ *
332
+ * @remarks
333
+ * 与 {@link defineExtend} 的区别是:`targetExtend` 会执行对 cla 的扩展操作,而 {@link defineExtend} 不会
334
+ *
335
+ *
336
+ * @param cla - 扩展的目标,也用作 this 的类型
337
+ * @param ext - 扩展描述对象,会自动更改其this的类型
338
+ * @returns 返回注入了 this 类型的 ext 对象本身
339
+ */
340
+ export declare function targetExtend<C extends ClassType, E>(cla: C, ext: E & ThisType<InstanceType<C> & E> & PrivateMemberOfExtend<C>): E & ThisType<InstanceType<C> & E>;
341
+ /**
342
+ * 创建用于扩展目标的便捷函数
343
+ *
344
+ * @remarks
345
+ * 它返回的便利函数的功能与 {@link targetExtend} 的功能一样,唯一区别是不再需要接收 cla 参数了
346
+ *
347
+ * @param cla - 扩展的目标,也用作 this 的类型
348
+ * @returns 可以用于 扩展目标 的便利函数
349
+ */
350
+ export declare function createTargetExtend<C extends ClassType>(cla: C): <E>(ext: E & ThisType<InstanceType<C> & E> & PrivateMemberOfExtend<C>) => E & ThisType<C & E>;
351
+ /**
352
+ * 扩展目标
353
+ *
354
+ * @remarks
355
+ * 会执行对 CEarth 类的扩展操作。
356
+ * 与 {@link targetExtend} 的区别仅仅是返回类型不一样。
357
+ *
358
+ * @param cla - 扩展的目标,也用作 this 的类型
359
+ * @param ext - 扩展对象,会自动更改其this的类型
360
+ * @returns 返回扩展后的 cla 对象
361
+ */
362
+ export declare function extendTarget<C extends ClassType, E>(cla: C, ext: E & ThisType<InstanceType<C> & E> & PrivateMemberOfExtend<C>): ClassType<ConstructorParameters<C>, E & ThisType<InstanceType<C> & E>>;
363
+ /**
364
+ * 创建用于扩展目标工具函数
365
+ *
366
+ * @remarks
367
+ * 它返回的便利函数的功能与 {@link extendTarget} 的功能一样,唯一区别是不再需要接收 cla 参数了
368
+ *
369
+ * @param cla - 扩展的目标,也用作 this 的类型
370
+ * @returns 可以用于 扩展目标 的便利函数
371
+ */
372
+ export declare function createExtendTarget<C extends ClassType>(cla: C): <E>(ext: E & ThisType<InstanceType<C> & E> & PrivateMemberOfExtend<C>) => ClassType<ConstructorParameters<C>, E & ThisType<InstanceType<C> & E>>;
373
+ /**
374
+ * 判断 code 是否是有校的 js 标识符
375
+ * @param code - 标识符的字符串
376
+ */
377
+ export declare function isIdentifier(code: string): boolean;
378
+ /**
379
+ * 判断函数是否是箭头函数
380
+ * @param fun - 被判断的函数
381
+ */
382
+ export declare function isArrowFunction(fun: Function): boolean;
383
+ /**
384
+ * 判断函数是否是 async 异步函数
385
+ * @remarks
386
+ * 异步函数 不包含 异步生成器函数 AsyncGeneratorFunction
387
+ * @param fun - 被判断的函数
388
+ */
389
+ export declare function isAsyncFunction(fun: Function): boolean;
390
+ /**
391
+ * 判断函数是否是生成器函数
392
+ *
393
+ * @remarks
394
+ * 生成器函数 不包含 异步生成器函数 AsyncGeneratorFunction
395
+ * @param fun - 被判断的函数
396
+ */
397
+ export declare function isGeneratorFunction(fun: Function): boolean;
398
+ /**
399
+ * 判断函数是否是异步生成器函数
400
+ * @param fun - 被判断的函数
401
+ */
402
+ export declare function isAsyncGeneratorFunction(fun: Function): boolean;
403
+ /**
404
+ * 判断是否是匿名函数
405
+ *
406
+ * @remarks
407
+ * 判断函数在被定义时是否是通过匿名函数来定义的。
408
+ * 匿名函数是指声明函数时没有写名字的函数。
409
+ * 注意:即使是匿名函数,函数对象上的 name 属性也可能是有值的,因为 js解析器 会自动将 函数表达式函数变量的名字作为匿名函数的名字,如下:
410
+ * ```ts
411
+ * var funName = function(){};
412
+ * ```
413
+ * 其中的匿名函数对象的 name 属性的值会是 `funName`
414
+ *
415
+ * 如果 函数对象上的 name 属性的值为 `""`,函数一定是匿名函数。
416
+ */
417
+ export declare function isAnonymousFunction(fun: Function): boolean;
418
+ /**
419
+ * 表示任意的函数类型
420
+ */
421
+ export declare type AnyFunction = (...args: any) => any;
422
+ /**
423
+ * 获取对象的方法的某个参数的类型
424
+ *
425
+ * @typeParam Obj - 对象
426
+ * @typeParam Method - 对象方法的名字
427
+ * @typeParam ParamIndex - 参数的索引个数
428
+ */
429
+ export declare type MethodParams<Obj, Method extends keyof Obj, ParamIndex extends number> = Obj[Method] extends AnyFunction ? Parameters<Obj[Method]>[ParamIndex] : never;
430
+ /**
431
+ * 获取对象的方法的返回的类型
432
+ *
433
+ * @typeParam Obj - 对象
434
+ * @typeParam Method - 对象方法的名字
435
+ */
436
+ export declare type MethodReturnType<Obj, Method extends keyof Obj> = Obj[Method] extends AnyFunction ? ReturnType<Obj[Method]> : never;
437
+ /**
438
+ * 获取 Promise 解决的类型的值
439
+ * @remarks
440
+ * 对于非 Promise 类型的值,返回原类型本身
441
+ */
442
+ export declare type ResolveData<P> = P extends Promise<infer D> ? D : P;
443
+ /**
444
+ * waitAsyncable 的返回值的类型
445
+ */
446
+ export declare type WaitAsyncableReturn<Result, Return> = Return extends Promise<any> ? Return : (Result extends Promise<any> ? Promise<Return> : Return);
447
+ /**
448
+ * waitAsyncable 的回调函数的类型
449
+ * @param result - 同步的结果
450
+ * @param rejected - 异步是否被拒绝
451
+ */
452
+ export declare type WaitAsyncableCallback<Result, Return> = (result: ResolveData<Result> | undefined, rejected: boolean, error: any) => Return;
453
+ /**
454
+ * 等待可异步的结果
455
+ *
456
+ * @remarks
457
+ * 当 asyncable 为同步值时,会同步调用 callback。
458
+ * 当 asyncable 为异步值时,会等待 asyncable 解决后再调用 callback。
459
+ *
460
+ * @param asyncable - 可异步的结果
461
+ * @param callback
462
+ * @returns
463
+ */
464
+ export declare function waitAsyncable<Result, Return>(asyncable: Result, callback: WaitAsyncableCallback<Result, Return>): WaitAsyncableReturn<Result, Return>;
465
+
466
+ export {};
@@ -5,7 +5,7 @@
5
5
  "toolPackages": [
6
6
  {
7
7
  "packageName": "@microsoft/api-extractor",
8
- "packageVersion": "7.28.3"
8
+ "packageVersion": "7.29.5"
9
9
  }
10
10
  ]
11
11
  }
@@ -1,3 +1,11 @@
1
+ /**
2
+ * 处理类型相关的工具
3
+ * @remarks
4
+ * type-tls 封装了与类型相关的工具,比如获取数据的类型 或 类型名字、判断数据的类型 等
5
+ *
6
+ * @packageDocumentation
7
+ */
8
+
1
9
  /**
2
10
  * 表示任意的函数类型
3
11
  */
@@ -10,7 +18,7 @@ export declare type AnyFunction = (...args: any) => any;
10
18
  * @typeParam Instance - 构建函数的返回的实例类型
11
19
  */
12
20
  export declare interface ClassType<Arg extends any[] = any[], Instance = any> {
13
- new (...args: Arg): Instance;
21
+ new (...args: Arg): Instance;
14
22
  }
15
23
 
16
24
  /**
@@ -312,6 +320,13 @@ export declare function isIterator(target: any): boolean;
312
320
  */
313
321
  export declare function isObject(target: any): boolean;
314
322
 
323
+ /**
324
+ * 获取值类型为指定类型的所有 key
325
+ */
326
+ export declare type KeyOfValue<Target, Value> = {
327
+ [K in keyof Target]: Target[K] extends Value ? K : never;
328
+ }[keyof Target];
329
+
315
330
  /**
316
331
  * 宽松的类型
317
332
  */
@@ -404,19 +419,19 @@ export declare type OptionalBoolean = Optional<boolean>;
404
419
  * 用于定义扩展选项中的私有成员
405
420
  */
406
421
  export declare interface PrivateMemberOfExtend<TargetType extends new (...args: any) => any> {
407
- /**
408
- * 扩展类中用于定义在创建实例时的初始化的方法
409
- * @remarks
410
- * 该方法会在创建实例时自动执行,并将构建函数接收到的参数透传给方方法。
411
- *
412
- * 注意:
413
- * _constructor 会被保存在 目标类中的 _constructors 属性中,它是一个数组。
414
- *
415
- * 目标类 需要在自己的构建函数中逐个调用 cla._constructors 中的函数
416
- *
417
- * @param args
418
- */
419
- _constructor?: (...args: (TargetType extends new (...args: infer A) => any ? A : never)) => void;
422
+ /**
423
+ * 扩展类中用于定义在创建实例时的初始化的方法
424
+ * @remarks
425
+ * 该方法会在创建实例时自动执行,并将构建函数接收到的参数透传给方方法。
426
+ *
427
+ * 注意:
428
+ * _constructor 会被保存在 目标类中的 _constructors 属性中,它是一个数组。
429
+ *
430
+ * 目标类 需要在自己的构建函数中逐个调用 cla._constructors 中的函数
431
+ *
432
+ * @param args
433
+ */
434
+ _constructor?: (...args: (TargetType extends new (...args: infer A) => any ? A : never)) => void;
420
435
  }
421
436
 
422
437
  /**
@@ -495,10 +510,7 @@ export declare function waitAsyncable<Result, Return>(asyncable: Result, callbac
495
510
  * @param result - 同步的结果
496
511
  * @param rejected - 异步是否被拒绝
497
512
  */
498
- export declare interface WaitAsyncableCallback<Result, Return> {
499
- (result: ResolveData<Result>, rejected: false): Return;
500
- (result: undefined, rejected: true, reason: any): Return;
501
- }
513
+ export declare type WaitAsyncableCallback<Result, Return> = (result: ResolveData<Result> | undefined, rejected: boolean, error: any) => Return;
502
514
 
503
515
  /**
504
516
  * waitAsyncable 的返回值的类型
@@ -1 +1 @@
1
- var typeTls=function(e){var y,g,T;"use strict";function a(n){var t=typeof n;return n&&(t==="object"||t==="function")}function o(n){var t=n;return n!=null&&(t=n.constructor,t==null&&(t=typeof n)),t}function f(n){switch(n){case void 0:return"undefined";case null:return"null"}let t=typeof n;switch(t){case"function":return n.name;case"string":return n;default:return t}}function d(n){return globalThis[n]}function A(n){let t=o(n);return f(t)}function s(n){return n==null||a(n)?o(n):typeof n}function b(n){var t=s(n);return f(t)}function m(n){var t=typeof n;return n==null||t!=="object"&&t!=="function"}function F(n){let t=n&&n.length;return Number.isInteger(n.length)&&t>=0}function O(n){return n&&typeof n[Symbol.iterator]=="function"}function E(n){return n&&typeof n.next=="function"}function i(n,...t){for(const r of t){const c=Object.getOwnPropertyDescriptors(r);Object.defineProperties(n,c)}return n}function M(n,t){return t}function w(){return function(t,r){return r}}function _(n,t){return i(n,t),t}function h(n){return function(r){return i(n,r),r}}function $(n,t){return i(n,t),n}function v(n){return function(r){return i(n,r),n}}function N(n,t){return t}function u(n,t){var c;i(n.prototype,t);const r=t._constructor;if(typeof r=="function"){const l=n;((c=l._constructors)!=null?c:l._constructors=[]).push(r)}return t}function S(n){return function(r){return u(n,r),r}}function I(n,t){return u(n,t),n}function j(n){return function(r){return u(n,r),n}}const G=/^[A-Za-z_$]+[\w$]*$/;function p(n){return G.test(n)}const z=/(^\s*(async\s+)?\s*(\b[A-Za-z_$]+[\w$]*\b)\s*=>)|(^\s*(async\s+)?\s*\(\s*(\b[A-Za-z_$]+[\w$]*\b)?\s*(,\s*(\b[A-Za-z_$]+[\w$]*\b)\s*)*\)\s*=>)/;function Z(n){const t=n.toString();return z.test(t)}const B=(y=globalThis.AsyncFunction)!=null?y:async function(){}.constructor;function D(n){return n instanceof B}const P=(g=globalThis.GeneratorFunction)!=null?g:function*(){}.constructor;function x(n){return n instanceof P}const L=(T=globalThis.AsyncGeneratorFunction)!=null?T:async function*(){}.constructor;function R(n){return n instanceof L}const k=/(^\s*(async\s+)?function\s*(\s|\*)\s*)[A-Za-z_$]+[\w$]*(\s*\()/;function q(n){if(n.name){const t=n.toString();return!k.test(t)}return!0}function C(n,t){return n instanceof Promise?n.then(r=>t(r,!1),r=>t(void 0,!0,r)):t(n,!1)}return e.createDefineMixin=w,e.createExtendTarget=j,e.createMixinTarget=v,e.createTargetExtend=S,e.createTargetMixin=h,e.defineExtend=N,e.defineMixin=M,e.extendTarget=I,e.getExactTypeNameOf=b,e.getExactTypeOf=s,e.getNameOfType=f,e.getTypeByName=d,e.getTypeNameOf=A,e.getTypeOf=o,e.isAnonymousFunction=q,e.isArrayLike=F,e.isArrowFunction=Z,e.isAsyncFunction=D,e.isAsyncGeneratorFunction=R,e.isBaseType=m,e.isGeneratorFunction=x,e.isIdentifier=p,e.isIterable=O,e.isIterator=E,e.isObject=a,e.mixin=i,e.mixinTarget=$,e.targetExtend=u,e.targetMixin=_,e.waitAsyncable=C,Object.defineProperties(e,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}}),e}({});
1
+ var TypeTls=function(e){var y,g,T;"use strict";function a(n){var t=typeof n;return n&&(t==="object"||t==="function")}function o(n){var t=n;return n!=null&&(t=n.constructor,t==null&&(t=typeof n)),t}function f(n){switch(n){case void 0:return"undefined";case null:return"null"}let t=typeof n;switch(t){case"function":return n.name;case"string":return n;default:return t}}function l(n){return globalThis[n]}function A(n){let t=o(n);return f(t)}function s(n){return n==null||a(n)?o(n):typeof n}function b(n){var t=s(n);return f(t)}function m(n){var t=typeof n;return n==null||t!=="object"&&t!=="function"}function F(n){let t=n&&n.length;return Number.isInteger(n.length)&&t>=0}function O(n){return n&&typeof n[Symbol.iterator]=="function"}function E(n){return n&&typeof n.next=="function"}function i(n,...t){for(const r of t){const c=Object.getOwnPropertyDescriptors(r);Object.defineProperties(n,c)}return n}function M(n,t){return t}function w(){return function(t,r){return r}}function _(n,t){return i(n,t),t}function v(n){return function(r){return i(n,r),r}}function h(n,t){return i(n,t),n}function $(n){return function(r){return i(n,r),n}}function N(n,t){return t}function u(n,t){var c;i(n.prototype,t);const r=t._constructor;if(typeof r=="function"){const d=n;((c=d._constructors)!=null?c:d._constructors=[]).push(r)}return t}function S(n){return function(r){return u(n,r),r}}function I(n,t){return u(n,t),n}function j(n){return function(r){return u(n,r),n}}const G=/^[A-Za-z_$]+[\w$]*$/;function p(n){return G.test(n)}const z=/(^\s*(async\s+)?\s*(\b[A-Za-z_$]+[\w$]*\b)\s*=>)|(^\s*(async\s+)?\s*\(\s*(\b[A-Za-z_$]+[\w$]*\b)?\s*(,\s*(\b[A-Za-z_$]+[\w$]*\b)\s*)*\)\s*=>)/;function Z(n){const t=n.toString();return z.test(t)}const B=(y=globalThis.AsyncFunction)!=null?y:async function(){}.constructor;function D(n){return n instanceof B}const P=(g=globalThis.GeneratorFunction)!=null?g:function*(){}.constructor;function x(n){return n instanceof P}const L=(T=globalThis.AsyncGeneratorFunction)!=null?T:async function*(){}.constructor;function R(n){return n instanceof L}const k=/(^\s*(async\s+)?function\s*(\s|\*)\s*)[A-Za-z_$]+[\w$]*(\s*\()/;function q(n){if(n.name){const t=n.toString();return!k.test(t)}return!0}function C(n,t){return n instanceof Promise?n.then(r=>t(r,!1,void 0),r=>t(void 0,!0,r)):t(n,!1,void 0)}return e.createDefineMixin=w,e.createExtendTarget=j,e.createMixinTarget=$,e.createTargetExtend=S,e.createTargetMixin=v,e.defineExtend=N,e.defineMixin=M,e.extendTarget=I,e.getExactTypeNameOf=b,e.getExactTypeOf=s,e.getNameOfType=f,e.getTypeByName=l,e.getTypeNameOf=A,e.getTypeOf=o,e.isAnonymousFunction=q,e.isArrayLike=F,e.isArrowFunction=Z,e.isAsyncFunction=D,e.isAsyncGeneratorFunction=R,e.isBaseType=m,e.isGeneratorFunction=x,e.isIdentifier=p,e.isIterable=O,e.isIterator=E,e.isObject=a,e.mixin=i,e.mixinTarget=h,e.targetExtend=u,e.targetMixin=_,e.waitAsyncable=C,Object.defineProperties(e,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}}),e}({});