esexts 2.2.1 → 2.2.2

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.
package/types.d.ts CHANGED
@@ -1,1654 +1,1654 @@
1
- // Copyright 2021 The dotcoo <dotcoo@163.com>. All rights reserved.
2
-
3
- /**
4
- * ES 扩展类型定义
5
- * 为 JavaScript 内置对象添加扩展方法
6
- */
7
- declare global {
8
- /**
9
- * Object 构造函数扩展
10
- */
11
- interface ObjectConstructor {
12
- /**
13
- * 创建一个新的 Object 实例
14
- */
15
- new(): Record<string, any>;
16
-
17
- /**
18
- * 检查一个值是否为对象
19
- * @param o 要检查的值
20
- * @returns 如果是对象返回 true,否则返回 false
21
- */
22
- isObject(o: any): boolean;
23
-
24
- /**
25
- * 合并多个对象
26
- * @param args 要合并的对象列表
27
- * @returns 合并后的新对象
28
- */
29
- merge(...args: Record<string, any>[]): Record<string, any>;
30
-
31
- /**
32
- * 连接多个对象
33
- * @param args 要连接的对象列表, 数组会合并, 而不是覆盖
34
- * @returns 连接后的新对象
35
- */
36
- concat(...args: Record<string, any>[]): Record<string, any>;
37
- }
38
-
39
- /**
40
- * Object 实例扩展
41
- */
42
- interface Object {
43
- /**
44
- * 克隆对象
45
- * @returns 克隆后的新对象
46
- */
47
- $clone(): Record<string, any>;
48
-
49
- /**
50
- * 获取对象的长度(属性数量)
51
- * @returns 对象的属性数量
52
- */
53
- $length(): number;
54
-
55
- /**
56
- * 获取对象的键值对迭代器
57
- * @returns 键值对迭代器
58
- */
59
- $entries(): [string, any][];
60
-
61
- /**
62
- * 获取对象的键迭代器
63
- * @returns 键迭代器
64
- */
65
- $keys(): string[];
66
-
67
- /**
68
- * 获取对象的值迭代器
69
- * @returns 值迭代器
70
- */
71
- $values(): any[];
72
-
73
- /**
74
- * 分配属性到对象
75
- * @param args 要分配的属性源
76
- * @returns 分配后的对象
77
- */
78
- $assign(...sources: any[]): Record<string, any>;
79
-
80
- /**
81
- * 将值转换为 JSON 字符串
82
- * @param v 要转换的值
83
- * @param replacer 替换函数或数组
84
- * @param space 缩进空格
85
- * @returns JSON 字符串
86
- */
87
- $stringify(replacer?: any, space?: string | number): string;
88
-
89
- /**
90
- * 合并多个对象到当前对象
91
- * @param args 要合并的对象列表
92
- * @returns 合并后的对象
93
- */
94
- $merge(...args: Record<string, any>[]): Record<string, any>;
95
-
96
- /**
97
- * 连接多个对象到当前对象
98
- * @param args 要连接的对象列表, 数组会合并, 而不是覆盖
99
- * @returns 连接后的对象
100
- */
101
- $concat(...args: Record<string, any>[]): Record<string, any>;
102
-
103
- /**
104
- * 检查对象是否为空
105
- * @returns 如果对象为空返回 true,否则返回 false
106
- */
107
- $empty(): boolean;
108
-
109
- /**
110
- * 检查对象是否包含指定键
111
- * @param key 要检查的键
112
- * @returns 如果包含指定键返回 true,否则返回 false
113
- */
114
- $has(key: string): boolean;
115
-
116
- /**
117
- * 从对象中选取指定键的属性
118
- * @param keys 要选取的键列表
119
- * @returns 包含指定键属性的新对象
120
- */
121
- $pick(...keys: string[]): Record<string, any>;
122
-
123
- /**
124
- * 从对象中排除指定键的属性
125
- * @param keys 要排除的键列表
126
- * @returns 排除指定键属性的新对象
127
- */
128
- $omit(...keys: string[]): Record<string, any>;
129
-
130
- /**
131
- * 获取对象的属性
132
- * @param key 属性键
133
- * @returns 属性值
134
- */
135
- $attr(key: string): any;
136
-
137
- /**
138
- * 设置对象的属性
139
- * @param key 属性键
140
- * @param val 属性值
141
- * @returns 当前对象
142
- */
143
- $attr(key: string, val: any): this;
144
-
145
- /**
146
- * 获取对象的属性(带默认值)
147
- * @param key 属性键
148
- * @param val 属性值
149
- * @param defval 默认值
150
- * @returns 属性值
151
- */
152
- $attr(key: string, defval: any, options: { defval: any }): any;
153
-
154
- /**
155
- * 设置对象的属性(带存在性检查)
156
- * @param key 属性键
157
- * @param val 属性值
158
- * @param exists 是否检查属性是否存在
159
- * @returns 当前对象
160
- */
161
- $attr(key: string, val: any, options: { exists: boolean }): this;
162
-
163
- /**
164
- * 设置对象的属性(带存在性检查)
165
- * @param key 属性键
166
- * @param val 属性值
167
- * @param define 属性定义
168
- * @returns 当前对象
169
- */
170
- $attr(key: string, val: any, options: { define: any }): this;
171
-
172
- /**
173
- * 属性四则运算(带定义选项)
174
- * @param key 属性键
175
- * @param val 属性值
176
- * @param defval 默认值
177
- * @param add 加法值
178
- * @param sub 减法值
179
- * @param mul 乘法值
180
- * @param div 除法值
181
- * @returns 当前对象
182
- */
183
- $attr(key: string, val: any, options: { defval: any, add: number, sub: number, mul: number, div: number }): this;
184
-
185
- /**
186
- * 通过管道函数处理对象
187
- * @param pipe 管道函数
188
- * @param args 额外参数
189
- * @returns 管道函数的返回值
190
- */
191
- $pipe<T>(pipe: (value: this, ...args: any[]) => T, ...args: any[]): T;
192
-
193
- /**
194
- * 执行副作用函数并返回原对象
195
- * @param tee 副作用函数
196
- * @param args 额外参数
197
- * @returns 原对象
198
- */
199
- $tee(tee: (value: this, ...args: any[]) => void, ...args: any[]): this;
200
-
201
- /**
202
- * 将对象转换为数组
203
- * @returns 对象转换后的数组
204
- */
205
- $toArray(): any[];
206
-
207
- /**
208
- * 输出调试信息
209
- * @param args 调试信息
210
- * @returns 原对象
211
- */
212
- $debug(...args: any[]): this;
213
-
214
- /**
215
- * 输出日志信息
216
- * @param args 日志信息
217
- * @returns 原对象
218
- */
219
- $log(...args: any[]): this;
220
-
221
- /**
222
- * 输出信息
223
- * @param args 信息
224
- * @returns 原对象
225
- */
226
- $info(...args: any[]): this;
227
-
228
- /**
229
- * 输出警告信息
230
- * @param args 警告信息
231
- * @returns 原对象
232
- */
233
- $warn(...args: any[]): this;
234
-
235
- /**
236
- * 输出错误信息
237
- * @param args 错误信息
238
- * @returns 原对象
239
- */
240
- $error(...args: any[]): this;
241
-
242
- /**
243
- * 输出对象的详细信息
244
- * @param args 额外参数
245
- * @returns 原对象
246
- */
247
- $dir(...args: any[]): this;
248
-
249
- /**
250
- * 触发调试器断点
251
- * @param args 额外参数
252
- * @returns 原对象
253
- */
254
- $debugger(...args: any[]): this;
255
-
256
- /**
257
- * 获取对象的父级链
258
- * @param self 是否包含自身
259
- * @param depth 深度限制
260
- * @param parent 父级属性名
261
- * @returns 父级链数组
262
- */
263
- $getParents(self?: boolean, depth?: number, parent?: string): any[];
264
-
265
- /**
266
- * 获取对象的子级链
267
- * @param self 是否包含自身
268
- * @param depth 深度限制
269
- * @param children 子级属性名
270
- * @returns 子级链数组
271
- */
272
- $getChildrens(self?: boolean, depth?: number, children?: string): any[];
273
-
274
- /**
275
- * 在树结构中查找节点
276
- * @param cb 查找回调函数
277
- * @param self 是否包含自身
278
- * @param depth 深度限制
279
- * @param children 子级属性名
280
- * @returns 找到的节点
281
- */
282
- $tree$find(cb: (node: any) => boolean, self?: boolean, depth?: number, children?: string): any;
283
-
284
- /**
285
- * 遍历树结构中的节点
286
- * @param cb 遍历回调函数
287
- * @param self 是否包含自身
288
- * @param depth 深度限制
289
- * @param children 子级属性名
290
- */
291
- $tree$each(cb: (node: any) => void, self?: boolean, depth?: number, children?: string): void;
292
-
293
- /**
294
- * 映射树结构中的节点
295
- * @param cb 映射回调函数
296
- * @param self 是否包含自身
297
- * @param depth 深度限制
298
- * @param children 子级属性名
299
- * @param empty 空值处理
300
- * @returns 映射后的树结构
301
- */
302
- $tree$map(cb: (node: any) => any, self?: boolean, depth?: number, children?: string, empty?: any): any;
303
- }
304
-
305
- /**
306
- * Number 实例扩展
307
- */
308
- interface Number {
309
- /**
310
- * 向上取整
311
- * @returns 向上取整后的值
312
- */
313
- ceil(): number;
314
-
315
- /**
316
- * 向下取整
317
- * @returns 向下取整后的值
318
- */
319
- floor(): number;
320
-
321
- /**
322
- * 截断小数部分
323
- * @returns 截断后的值
324
- */
325
- trunc(): number;
326
-
327
- /**
328
- * 获取绝对值
329
- * @returns 绝对值
330
- */
331
- abs(): number;
332
-
333
- /**
334
- * 获取最大值
335
- * @param args 比较值列表
336
- * @returns 最大值
337
- */
338
- max(...args: number[]): number;
339
-
340
- /**
341
- * 获取最小值
342
- * @param args 比较值列表
343
- * @returns 最小值
344
- */
345
- min(...args: number[]): number;
346
-
347
- /**
348
- * 固定小数位数
349
- * @param decimal 小数位数
350
- * @returns 固定小数位数后的值
351
- */
352
- fixed(decimal?: number): number;
353
-
354
- /**
355
- * 四舍五入
356
- * @param precision 精度
357
- * @returns 四舍五入后的值
358
- */
359
- round(precision?: number): number;
360
-
361
- /**
362
- * 加法运算
363
- * @param v 加数
364
- * @returns 加法结果
365
- */
366
- add(v: number): number;
367
-
368
- /**
369
- * 使用函数进行加法运算
370
- * @param v 加法函数
371
- * @param args 函数参数
372
- * @returns 加法结果
373
- */
374
- add(v: ((v:number, ...args: any[]) => number), ...args: any[]): number;
375
-
376
- /**
377
- * 减法运算
378
- * @param v 减数
379
- * @returns 减法结果
380
- */
381
- sub(v: number): number;
382
-
383
- /**
384
- * 使用函数进行减法运算
385
- * @param v 减法函数
386
- * @param args 函数参数
387
- * @returns 减法结果
388
- */
389
- sub(v: ((v:number, ...args: any[]) => number), ...args: any[]): number;
390
-
391
- /**
392
- * 乘法运算
393
- * @param v 乘数
394
- * @returns 乘法结果
395
- */
396
- mul(v: number): number;
397
-
398
- /**
399
- * 使用函数进行乘法运算
400
- * @param v 乘法函数
401
- * @param args 函数参数
402
- * @returns 乘法结果
403
- */
404
- mul(v: ((v:number, ...args: any[]) => number), ...args: any[]): number;
405
-
406
- /**
407
- * 除法运算
408
- * @param v 除数
409
- * @returns 除法结果
410
- */
411
- div(v: number): number;
412
-
413
- /**
414
- * 使用函数进行除法运算
415
- * @param v 除法函数
416
- * @param args 函数参数
417
- * @returns 除法结果
418
- */
419
- div(v: ((v:number, ...args: any[]) => number), ...args: any[]): number;
420
-
421
- /**
422
- * 进制转换
423
- * @param base 目标进制
424
- * @returns 转换后的字符串
425
- */
426
- baseConvert(base?: number): string;
427
-
428
- /**
429
- * 单位转换
430
- * @param units 单位定义
431
- * @param decimal 小数位数
432
- * @returns 转换后的字符串
433
- */
434
- unit(units: Record<string, number>, decimal?: number): string;
435
-
436
- /**
437
- * 单位转换(支持数组输出)
438
- * @param units 单位定义
439
- * @param array 是否返回数组
440
- * @returns 转换后的字符串或数组
441
- */
442
- units(units: Record<string, number>, array?: boolean): string | [number, string][];
443
-
444
- /**
445
- * 转换为日期对象
446
- * @returns 日期对象
447
- */
448
- toDate(): Date;
449
- }
450
-
451
- /**
452
- * BigInt 实例扩展
453
- */
454
- interface BigInt {
455
- /**
456
- * 转换为 JSON 格式
457
- * @returns 转换后的数字或字符串
458
- */
459
- toJSON(): number | string;
460
- }
461
-
462
- /**
463
- * String 构造函数扩展
464
- */
465
- interface StringConstructor {
466
- /**
467
- * 创建一个新的 String 实例
468
- */
469
- new(): string;
470
- }
471
-
472
- /**
473
- * String 实例扩展
474
- */
475
- interface String {
476
- /**
477
- * 获取字符串长度
478
- * @returns 字符串长度
479
- */
480
- $length(): number;
481
-
482
- /**
483
- * 截取子字符串
484
- * @param s 开始位置
485
- * @param e 结束位置
486
- * @returns 截取的子字符串
487
- */
488
- $substring(s?: number, e?: number): string;
489
-
490
- /**
491
- * 截取子字符串(从指定位置开始)
492
- * @param s 开始位置
493
- * @param e 长度
494
- * @returns 截取的子字符串
495
- */
496
- $substr(s?: number, e?: number): string;
497
-
498
- /**
499
- * 分割字符串
500
- * @param s 分隔符
501
- * @param n 分割数量
502
- * @returns 分割后的数组
503
- */
504
- $split(s?: string, n?: number): string[];
505
-
506
- /**
507
- * 分割字符串并转换为数字数组
508
- * @param s 分隔符
509
- * @returns 数字数组
510
- */
511
- $split$number(s?: string): number[];
512
-
513
- /**
514
- * 按指定长度分割字符串
515
- * @param n 分割长度
516
- * @returns 分割后的数组
517
- */
518
- $split$segment(n?: number): string[];
519
-
520
- /**
521
- * 格式化字符串
522
- * @param args 格式化参数
523
- * @returns 格式化后的字符串
524
- */
525
- sprintf(...args: any[]): string;
526
-
527
- /**
528
- * 提取两个字符串之间的内容
529
- * @param begin 开始字符串
530
- * @param end 结束字符串
531
- * @param n 提取数量
532
- * @param position 开始位置
533
- * @returns 提取的内容
534
- */
535
- subOf(begin: string, end: string, n?: number, position?: number): string;
536
-
537
- /**
538
- * 从末尾提取两个字符串之间的内容
539
- * @param begin 开始字符串
540
- * @param end 结束字符串
541
- * @param n 提取数量
542
- * @param position 开始位置
543
- * @returns 提取的内容
544
- */
545
- lastSubOf(begin: string, end: string, n?: number, position?: number): string;
546
-
547
- /**
548
- * 驼峰命名转换为下划线命名
549
- * @returns 下划线命名的字符串
550
- */
551
- camel2under(): string;
552
-
553
- /**
554
- * 下划线命名转换为驼峰命名
555
- * @returns 驼峰命名的字符串
556
- */
557
- under2camel(): string;
558
-
559
- /**
560
- * 驼峰命名转换为帕斯卡命名
561
- * @returns 帕斯卡命名的字符串
562
- */
563
- camel2pascal(): string;
564
-
565
- /**
566
- * 帕斯卡命名转换为驼峰命名
567
- * @returns 驼峰命名的字符串
568
- */
569
- pascal2camel(): string;
570
-
571
- /**
572
- * 下划线命名转换为短横线命名
573
- * @returns 短横线命名的字符串
574
- */
575
- under2kebab(): string;
576
-
577
- /**
578
- * 短横线命名转换为下划线命名
579
- * @returns 下划线命名的字符串
580
- */
581
- kebab2under(): string;
582
-
583
- /**
584
- * 进制转换
585
- * @param base 目标进制
586
- * @returns 转换后的字符串
587
- */
588
- baseConvert(base?: number): string;
589
-
590
- /**
591
- * 固定小数位数
592
- * @param decimal 小数位数
593
- * @returns 固定小数位数后的字符串
594
- */
595
- fixed(decimal?: number): string;
596
-
597
- /**
598
- * 转换为日期对象
599
- * @returns 日期对象
600
- */
601
- toDate(): Date;
602
-
603
- /**
604
- * 转换为 Uint8Array
605
- * @returns Uint8Array
606
- */
607
- toUint8Array(): Uint8Array;
608
-
609
- /**
610
- * 十六进制编码
611
- * @returns 十六进制编码的字符串
612
- */
613
- hexencode(): string;
614
-
615
- /**
616
- * 十六进制解码
617
- * @returns 解码后的字符串
618
- */
619
- hexdecode(): string;
620
-
621
- /**
622
- * Base64 编码
623
- * @returns Base64 编码的字符串
624
- */
625
- base64encode(): string;
626
-
627
- /**
628
- * Base64 解码
629
- * @returns 解码后的字符串
630
- */
631
- base64decode(): string;
632
- }
633
-
634
- /**
635
- * Array 构造函数扩展
636
- */
637
- interface ArrayConstructor {
638
- /**
639
- * 创建一个新的数组实例
640
- */
641
- new(): any[];
642
-
643
- /**
644
- * 创建一个新的泛型数组实例
645
- */
646
- new<T>(): T[];
647
-
648
- /**
649
- * 通过元素创建一个新的数组实例
650
- * @param items 数组元素
651
- */
652
- new<T>(...items: T[]): T[];
653
-
654
- /**
655
- * 通过长度创建一个新的数组实例
656
- * @param length 数组长度
657
- */
658
- new<T>(length: number): T[];
659
-
660
- /**
661
- * 创建一个范围数组
662
- * @param end 结束值
663
- * @param callback 回调函数
664
- * @param input 是否将索引作为输入
665
- * @returns 范围数组
666
- */
667
- range<T>(end: number, callback?: ((number: number, i: number, a: T[]) => T), input?: boolean): T[];
668
-
669
- /**
670
- * 创建一个范围数组
671
- * @param start 开始值
672
- * @param end 结束值
673
- * @param callback 回调函数
674
- * @param input 是否将索引作为输入
675
- * @returns 范围数组
676
- */
677
- range<T>(start: number, end: number, callback?: ((number: number, i: number, a: T[]) => T), input?: boolean): T[];
678
-
679
- /**
680
- * 创建一个范围数组
681
- * @param start 开始值
682
- * @param end 结束值
683
- * @param step 步长
684
- * @param callback 回调函数
685
- * @param input 是否将索引作为输入
686
- * @returns 范围数组
687
- */
688
- range<T>(start: number, end: number, step: number, callback?: ((number: number, i: number, a: T[]) => T), input?: boolean): T[];
689
- }
690
-
691
- /**
692
- * Array 实例扩展
693
- */
694
- interface Array<T> {
695
- /**
696
- * 获取数组长度
697
- * @returns 数组长度
698
- */
699
- $length(): number;
700
-
701
- /**
702
- * 获取数组的键值对迭代器
703
- * @returns 键值对迭代器
704
- */
705
- $entries(): [number, T][];
706
-
707
- /**
708
- * 获取数组的键迭代器
709
- * @returns 键迭代器
710
- */
711
- $keys(): number[];
712
-
713
- /**
714
- * 获取数组的值迭代器
715
- * @returns 值迭代器
716
- */
717
- $values(): T[];
718
-
719
- /**
720
- * 映射数组元素
721
- * @param callback 映射函数
722
- * @returns 映射后的新数组
723
- */
724
- $map<U>(callback: (v: T, i: number, array: T[]) => U): U[];
725
-
726
- /**
727
- * 向数组末尾添加元素, 并返回当前数组
728
- * @param items 要添加的元素
729
- * @returns 添加后的数组
730
- */
731
- $push(...items: T[]): T[];
732
-
733
- /**
734
- * 从数组末尾移除元素, 并返回当前数组
735
- * @returns 移除元素后的数组
736
- */
737
- $pop(): T[];
738
-
739
- /**
740
- * 从数组开头移除元素, 并返回当前数组
741
- * @returns 移除元素后的数组
742
- */
743
- $shift(): T[];
744
-
745
- /**
746
- * 向数组开头添加元素, 并返回当前数组
747
- * @param items 要添加的元素
748
- * @returns 添加后的数组
749
- */
750
- $unshift(...items: T[]): T[];
751
-
752
- /**
753
- * 从数组中删除元素并添加新元素, 并返回当前数组
754
- * @param start 开始位置
755
- * @param deleteCount 删除数量
756
- * @param items 要添加的元素
757
- * @returns 被删除的元素数组
758
- */
759
- $splice(start: number, deleteCount?: number, ...items: T[]): T[];
760
-
761
- /**
762
- * 向数组末尾添加元素(返回添加的元素)
763
- * @param items 要添加的元素
764
- * @returns 添加后的数组
765
- */
766
- $pusha(...items: T[]): T[];
767
-
768
- /**
769
- * 向数组开头添加元素(返回添加的元素)
770
- * @param items 要添加的元素
771
- * @returns 添加后的数组
772
- */
773
- $unshifta(...items: T[]): T[];
774
-
775
- /**
776
- * 向数组末尾添加元素(返回第一个添加的元素)
777
- * @param items 要添加的元素
778
- * @returns 第一个添加的元素
779
- */
780
- $push0(...items: T[]): T;
781
-
782
- /**
783
- * 向数组开头添加元素(返回第一个添加的元素)
784
- * @param items 要添加的元素
785
- * @returns 第一个添加的元素
786
- */
787
- $unshift0(...items: T[]): T;
788
-
789
- /**
790
- * 检查数组是否为空
791
- * @returns 如果数组为空返回 true,否则返回 false
792
- */
793
- $empty(): boolean;
794
-
795
- /**
796
- * 获取数组的第一个元素
797
- * @param defval 默认值
798
- * @returns 第一个元素或默认值
799
- */
800
- first(defval?: T): T;
801
-
802
- /**
803
- * 获取数组的最后一个元素
804
- * @param defval 默认值
805
- * @returns 最后一个元素或默认值
806
- */
807
- last(defval?: T): T;
808
-
809
- /**
810
- * 查找数组中的元素
811
- * @param cb 查找回调函数
812
- * @param defval 默认值
813
- * @returns 找到的元素或默认值
814
- */
815
- $find(cb: (value: T, index: number, array: T[]) => boolean, defval?: T): T;
816
-
817
- /**
818
- * 比较两个数组是否相等
819
- * @param a 要比较的数组
820
- * @returns 如果相等返回 true,否则返回 false
821
- */
822
- equals(a: T[]): boolean;
823
-
824
- /**
825
- * 去重数组元素
826
- * @param cb 比较函数
827
- * @returns 去重后的新数组
828
- */
829
- unique(cb?: (value: T) => any): T[];
830
-
831
- /**
832
- * 遍历数组元素
833
- * @param cb 遍历回调函数
834
- * @returns 原数组
835
- */
836
- each(cb: (value: T, index: number, array: T[]) => void): T[];
837
-
838
- /**
839
- * 异步遍历数组元素
840
- * @param cb 异步遍历回调函数
841
- * @returns Promise,解析为原数组
842
- */
843
- each$async(cb: (value: T, index: number, array: T[]) => Promise<void>): Promise<T[]>;
844
-
845
- /**
846
- * 异步映射数组元素
847
- * @param cb 异步映射函数
848
- * @returns Promise,解析为映射后的新数组
849
- */
850
- map$async<U>(cb: (value: T, index: number, array: T[]) => Promise<U>): Promise<U[]>;
851
-
852
- /**
853
- * 打乱数组元素
854
- * @param clone 是否克隆数组
855
- * @returns 打乱后的数组
856
- */
857
- shuffle(clone?: boolean): T[];
858
-
859
- /**
860
- * 计算两个数组的并集
861
- * @param a 另一个数组
862
- * @returns 并集数组
863
- */
864
- union(a: T[]): T[];
865
-
866
- /**
867
- * 计算两个数组的交集
868
- * @param a 另一个数组
869
- * @returns 交集数组
870
- */
871
- intersection(a: T[]): T[];
872
-
873
- /**
874
- * 计算两个数组的差集
875
- * @param a 另一个数组
876
- * @returns 差集数组
877
- */
878
- difference(a: T[]): T[];
879
-
880
- /**
881
- * 计算两个数组的对称差集
882
- * @param a 另一个数组
883
- * @returns 对称差集数组
884
- */
885
- symmetricDifference(a: T[]): T[];
886
-
887
- /**
888
- * 转换为 Map
889
- * @param cb 转换函数
890
- * @returns 转换后的 Map
891
- */
892
- toMap(cb?: (value: T, index: number) => [any, any]): Map<any, any>;
893
-
894
- /**
895
- * 转换为 Set
896
- * @param cb 转换函数
897
- * @returns 转换后的 Set
898
- */
899
- toSet(cb?: (value: T) => any): Set<any>;
900
-
901
- /**
902
- * 转换为 Uint8Array
903
- * @returns 转换后的 Uint8Array
904
- */
905
- toUint8Array(): Uint8Array;
906
-
907
- /**
908
- * 转换为 Base64 字符串
909
- * @returns Base64 字符串
910
- */
911
- toBase64(): string;
912
-
913
- /**
914
- * 转换为十六进制字符串
915
- * @returns 十六进制字符串
916
- */
917
- toHex(): string;
918
-
919
- /**
920
- * 解码字符串
921
- * @returns 解码后的字符串
922
- */
923
- decode(): string;
924
-
925
- assoc(id: keyof T & string, prop: keyof T & string, assoc?: Record<string, any> | ((ids: T[]) => Record<string, any>)): this;
926
- toTree(o?: { id?: string; pid?: string; level?: string; root?: string; parent?: string; children?: string; empty?: any; hasRoot?: boolean }): any;
927
- $tree2tree(o?: { id?: string; pid?: string; level?: string; root?: string; parent?: string; children?: string; empty?: any }, r?: any, p?: any): any;
928
- $tree$find(cb: (value: any) => boolean, self?: boolean, depth?: number, children?: string): any | null;
929
- $tree$each(cb: (value: any) => void, self?: boolean, depth?: number, children?: string): this;
930
- $tree$map<U>(cb: (value: any) => U, self?: boolean, depth?: number, children?: string, empty?: any): U[];
931
- }
932
-
933
- /**
934
- * Map 构造函数扩展
935
- */
936
- interface MapConstructor {
937
- /**
938
- * 创建一个新的 Map 实例
939
- */
940
- new<K, V>(): Map<K, V>;
941
-
942
- /**
943
- * 通过迭代器创建一个新的 Map 实例
944
- * @param iterator 迭代器
945
- */
946
- new<K, V>(iterator: Iterator<K, V, V>): Map<K, V>;
947
- }
948
-
949
- /**
950
- * Map 实例扩展
951
- */
952
- interface Map<K, V> {
953
- /**
954
- * 获取 Map 的大小
955
- * @returns Map 的大小
956
- */
957
- $length(): number;
958
-
959
- /**
960
- * 获取 Map 的键值对迭代器
961
- * @returns 键值对迭代器
962
- */
963
- $entries(): IterableIterator<[K, V]>;
964
-
965
- /**
966
- * 获取 Map 的键迭代器
967
- * @returns 键迭代器
968
- */
969
- $keys(): IterableIterator<K>;
970
-
971
- /**
972
- * 获取 Map 的值迭代器
973
- * @returns 值迭代器
974
- */
975
- $values(): IterableIterator<V>;
976
-
977
- /**
978
- * 设置键值对, 并返回当前Map
979
- * @param key 键
980
- * @param value 值
981
- * @returns Map 实例
982
- */
983
- $set(key: K, value: V): Map<K, V>;
984
-
985
- /**
986
- * 删除键值对, 并返回当前Map
987
- * @param key 键
988
- * @returns Map 实例
989
- */
990
- $delete(key: K): Map<K, V>;
991
-
992
- /**
993
- * 设置键值对并返回键值对数组
994
- * @param key 键
995
- * @param value 值
996
- * @returns 键值对数组
997
- */
998
- $seta(key: K, value: V): [K, V];
999
-
1000
- /**
1001
- * 删除键值对并返回键数组
1002
- * @param key 键
1003
- * @returns 键数组
1004
- */
1005
- $deletea(key: K): [K];
1006
-
1007
- /**
1008
- * 设置键值对并返回键
1009
- * @param key 键
1010
- * @param value 值
1011
- * @returns 键
1012
- */
1013
- $set0(key: K, value: V): K;
1014
-
1015
- /**
1016
- * 删除键值对并返回键
1017
- * @param key 键
1018
- * @returns 键
1019
- */
1020
- $delete0(key: K): K;
1021
-
1022
- /**
1023
- * 设置键值对并返回值
1024
- * @param key 键
1025
- * @param value 值
1026
- * @returns 值
1027
- */
1028
- $set1(key: K, value: V): V;
1029
-
1030
- /**
1031
- * 删除键值对并返回值
1032
- * @param key 键
1033
- * @returns 值
1034
- */
1035
- $delete1(key: K): V;
1036
-
1037
- /**
1038
- * 获取值,如果不存在则插入默认值
1039
- * @param key 键
1040
- * @param defval 默认值
1041
- * @returns 值
1042
- */
1043
- $getOrInsert(key: K, defval?: V): V;
1044
-
1045
- /**
1046
- * 获取值,如果不存在则计算并插入
1047
- * @param key 键
1048
- * @param callback 计算函数
1049
- * @returns 值
1050
- */
1051
- $getOrInsertComputed(key: K, callback: (key: K) => V): V;
1052
-
1053
- /**
1054
- * 获取值,如果不存在则返回默认值
1055
- * @param key 键
1056
- * @param defval 默认值或计算函数
1057
- * @returns 值
1058
- */
1059
- $get(key: K, defval?: V | ((key: K) => V)): V;
1060
-
1061
- /**
1062
- * 异步获取值,如果不存在则返回默认值
1063
- * @param key 键
1064
- * @param defval 默认值或异步计算函数
1065
- * @returns Promise,解析为值
1066
- */
1067
- $get$async(key: K, defval?: V | ((key: K) => Promise<V>)): Promise<V>;
1068
-
1069
- /**
1070
- * 转换为对象
1071
- * @returns 转换后的对象
1072
- */
1073
- toObject(): Record<string, V>;
1074
-
1075
- /**
1076
- * 转换为数组
1077
- * @returns 转换后的数组
1078
- */
1079
- toArray(): [K, V][];
1080
-
1081
- /**
1082
- * 转换为 JSON 格式
1083
- * @returns 转换后的数组
1084
- */
1085
- toJSON(): [K, V][];
1086
-
1087
- /**
1088
- * 获取值,如果不存在则插入默认值
1089
- * @param key 键
1090
- * @param defval 默认值
1091
- * @returns 值
1092
- */
1093
- getOrInsert(key: K, defval?: V): V;
1094
-
1095
- /**
1096
- * 获取值,如果不存在则计算并插入
1097
- * @param key 键
1098
- * @param callback 计算函数
1099
- * @returns 值
1100
- */
1101
- getOrInsertComputed(key: K, callback: (key: K) => V): V;
1102
- }
1103
-
1104
- /**
1105
- * Set 构造函数扩展
1106
- */
1107
- interface SetConstructor {
1108
- /**
1109
- * 创建一个新的 Set 实例
1110
- */
1111
- new<T>(): Set<T>;
1112
-
1113
- /**
1114
- * 通过迭代器创建一个新的 Set 实例
1115
- * @param iterator 迭代器
1116
- */
1117
- new<T>(iterator: Iterator<T, T, T>): Set<T>;
1118
- }
1119
-
1120
- /**
1121
- * Set 实例扩展
1122
- */
1123
- interface Set<T> {
1124
- /**
1125
- * 获取 Set 的大小
1126
- * @returns Set 的大小
1127
- */
1128
- $length(): number;
1129
-
1130
- /**
1131
- * 获取 Set 的键值对迭代器
1132
- * @returns 键值对迭代器
1133
- */
1134
- $entries(): IterableIterator<[T, T]>;
1135
-
1136
- /**
1137
- * 获取 Set 的键迭代器
1138
- * @returns 键迭代器
1139
- */
1140
- $keys(): IterableIterator<T>;
1141
-
1142
- /**
1143
- * 获取 Set 的值迭代器
1144
- * @returns 值迭代器
1145
- */
1146
- $values(): IterableIterator<T>;
1147
-
1148
- /**
1149
- * 添加元素, 并返回当前Map
1150
- * @param value 值
1151
- * @returns Set 实例
1152
- */
1153
- $add(value: T): Set<T>;
1154
-
1155
- /**
1156
- * 删除元素, 并返回当前Map
1157
- * @param value 值
1158
- * @returns Set 实例
1159
- */
1160
- $delete(value: T): Set<T>;
1161
-
1162
- /**
1163
- * 添加元素并返回元素数组
1164
- * @param value 值
1165
- * @returns 元素数组
1166
- */
1167
- $adda(value: T): [T];
1168
-
1169
- /**
1170
- * 删除元素并返回元素数组
1171
- * @param value 值
1172
- * @returns 元素数组
1173
- */
1174
- $deletea(value: T): [T];
1175
-
1176
- /**
1177
- * 添加元素并返回元素
1178
- * @param value 值
1179
- * @returns 元素
1180
- */
1181
- $add0(value: T): T;
1182
-
1183
- /**
1184
- * 删除元素并返回元素
1185
- * @param value 值
1186
- * @returns 元素
1187
- */
1188
- $delete0(value: T): T;
1189
-
1190
- /**
1191
- * 计算两个 Set 的并集
1192
- * @param s 另一个 Set
1193
- * @returns 并集 Set
1194
- */
1195
- $union(s: Set<T>): Set<T>;
1196
-
1197
- /**
1198
- * 计算两个 Set 的交集
1199
- * @param s 另一个 Set
1200
- * @returns 交集 Set
1201
- */
1202
- $intersection(s: Set<T>): Set<T>;
1203
-
1204
- /**
1205
- * 计算两个 Set 的差集
1206
- * @param s 另一个 Set
1207
- * @returns 差集 Set
1208
- */
1209
- $difference(s: Set<T>): Set<T>;
1210
-
1211
- /**
1212
- * 计算两个 Set 的对称差集
1213
- * @param s 另一个 Set
1214
- * @returns 对称差集 Set
1215
- */
1216
- $symmetricDifference(s: Set<T>): Set<T>;
1217
-
1218
- /**
1219
- * 转换为数组
1220
- * @returns 转换后的数组
1221
- */
1222
- toArray(): T[];
1223
-
1224
- /**
1225
- * 转换为 JSON 格式
1226
- * @returns 转换后的数组
1227
- */
1228
- toJSON(): T[];
1229
- }
1230
-
1231
- /**
1232
- * Date 构造函数扩展
1233
- */
1234
- interface DateConstructor {
1235
- /**
1236
- * 创建一个新的 Date 实例
1237
- * @param args 构造参数
1238
- */
1239
- new(...args: any[]): Date;
1240
-
1241
- /**
1242
- * 格式化当前日期
1243
- * @param format 格式字符串
1244
- * @returns 格式化后的字符串
1245
- */
1246
- format(format?: string): string;
1247
-
1248
- /**
1249
- * 获取当前时间戳
1250
- * @returns 时间戳
1251
- */
1252
- unix(): number;
1253
-
1254
- /**
1255
- * 从时间戳创建 Date 实例
1256
- * @param time 时间戳
1257
- * @returns Date 实例
1258
- */
1259
- fromUnix(time: number): Date;
1260
-
1261
- /**
1262
- * 日期计算
1263
- * @param opts 计算选项
1264
- * @returns 计算后的 Date 实例
1265
- */
1266
- expr(opts: { y?: number; m?: number; d?: number; h?: number; i?: number; s?: number }): Date;
1267
-
1268
- /**
1269
- * 获取当天的时间范围
1270
- * @returns 时间范围数组 [开始时间戳, 结束时间戳]
1271
- */
1272
- toDayRange(): [number, number];
1273
-
1274
- /**
1275
- * 获取当周的时间范围
1276
- * @returns 时间范围数组 [开始时间戳, 结束时间戳]
1277
- */
1278
- toWeekRange(): [number, number];
1279
-
1280
- /**
1281
- * 获取当月的时间范围
1282
- * @returns 时间范围数组 [开始时间戳, 结束时间戳]
1283
- */
1284
- toMonthRange(): [number, number];
1285
-
1286
- /**
1287
- * 获取当年的时间范围
1288
- * @returns 时间范围数组 [开始时间戳, 结束时间戳]
1289
- */
1290
- toYearRange(): [number, number];
1291
- }
1292
-
1293
- /**
1294
- * Date 实例扩展
1295
- */
1296
- interface Date {
1297
- /**
1298
- * 格式化日期
1299
- * @param format 格式字符串
1300
- * @returns 格式化后的字符串
1301
- */
1302
- format(format?: string): string;
1303
-
1304
- /**
1305
- * 获取时间戳
1306
- * @returns 时间戳
1307
- */
1308
- unix(): number;
1309
-
1310
- /**
1311
- * 检查是否是闰年
1312
- * @returns 如果是闰年返回 true,否则返回 false
1313
- */
1314
- isLeapYear(): boolean;
1315
-
1316
- /**
1317
- * 获取月份中的天数
1318
- * @returns 月份中的天数
1319
- */
1320
- getMonthDay(): number;
1321
-
1322
- /**
1323
- * 日期计算
1324
- * @param opts 计算选项
1325
- * @returns 计算后的 Date 实例
1326
- */
1327
- expr(opts?: { y?: number; m?: number; d?: number; h?: number; i?: number; s?: number }): Date;
1328
-
1329
- /**
1330
- * 获取开始时间
1331
- * @param n 时间单位
1332
- * @returns 开始时间的 Date 实例
1333
- */
1334
- begin(n?: number): Date;
1335
-
1336
- /**
1337
- * 获取结束时间
1338
- * @param n 时间单位
1339
- * @returns 结束时间的 Date 实例
1340
- */
1341
- end(n?: number): Date;
1342
-
1343
- /**
1344
- * 获取指定周的日期
1345
- * @param n 周数
1346
- * @param dir 方向
1347
- * @returns 计算后的 Date 实例
1348
- */
1349
- week(n?: number, dir?: number): Date;
1350
-
1351
- /**
1352
- * 转换为 JSON 格式
1353
- * @returns 转换后的字符串
1354
- */
1355
- toJSON(): string;
1356
- }
1357
-
1358
- /**
1359
- * RegExp 实例扩展
1360
- */
1361
- interface RegExp {
1362
- /**
1363
- * 转换为 JSON 格式
1364
- * @returns 转换后的字符串
1365
- */
1366
- toJSON(): string;
1367
- }
1368
-
1369
- /**
1370
- * Promise 构造函数扩展
1371
- */
1372
- interface PromiseConstructor {
1373
- /**
1374
- * 创建一个通道,包含 Promise、resolve 和 reject 函数
1375
- * @returns 通道数组 [Promise, resolve, reject]
1376
- */
1377
- $channel(): [Promise<any>, (value: any) => void, (reason: any) => void];
1378
-
1379
- /**
1380
- * 创建一个带有解析器的 Promise
1381
- * @returns 包含 promise、resolve 和 reject 的对象
1382
- */
1383
- $withResolvers(): { promise: Promise<any>; resolve: (value: any) => void; reject: (reason: any) => void; };
1384
- }
1385
-
1386
- /**
1387
- * Promise 实例扩展
1388
- */
1389
- interface Promise<T> {
1390
- /**
1391
- * 尝试执行并捕获错误
1392
- * @returns Promise,解析为 [结果, null] 或 [null, 错误]
1393
- */
1394
- tryCatch(): Promise<[T, null] | [null, any]>;
1395
- }
1396
-
1397
- /**
1398
- * JSON 扩展
1399
- */
1400
- interface JSON {
1401
- /**
1402
- * 解析 JSON 字符串
1403
- * @param v 要解析的值
1404
- * @param defval 默认值
1405
- * @returns 解析后的对象或默认值
1406
- */
1407
- $parse(v: any, defval?: any): any;
1408
- }
1409
-
1410
- /**
1411
- * Iterator 扩展
1412
- */
1413
- interface Iterator<T> {
1414
- /**
1415
- * 转换为数组
1416
- * @returns 转换后的数组
1417
- */
1418
- toArray(): T[];
1419
- }
1420
-
1421
- /**
1422
- * ArrayBuffer 扩展
1423
- */
1424
- interface ArrayBuffer {
1425
- /**
1426
- * 转换为 Uint8Array
1427
- * @returns 转换后的 Uint8Array
1428
- */
1429
- toUint8Array(): Uint8Array;
1430
- }
1431
-
1432
- /**
1433
- * Uint8Array 构造函数扩展
1434
- */
1435
- interface Uint8ArrayConstructor {
1436
- /**
1437
- * 创建一个新的 Uint8Array 实例
1438
- */
1439
- new(): Uint8Array;
1440
-
1441
- /**
1442
- * 通过长度创建一个新的 Uint8Array 实例
1443
- * @param length 长度
1444
- */
1445
- new(length: number): Uint8Array;
1446
-
1447
- /**
1448
- * 从字符串创建 Uint8Array
1449
- * @param str 字符串
1450
- * @returns 创建的 Uint8Array
1451
- */
1452
- fromString(str: string): Uint8Array;
1453
-
1454
- /**
1455
- * 从十六进制字符串创建 Uint8Array
1456
- * @param str 十六进制字符串
1457
- * @returns 创建的 Uint8Array
1458
- */
1459
- $fromHex(str: string): Uint8Array;
1460
-
1461
- /**
1462
- * 从 Base64 字符串创建 Uint8Array
1463
- * @param str Base64 字符串
1464
- * @returns 创建的 Uint8Array
1465
- */
1466
- $fromBase64(str: string): Uint8Array;
1467
- }
1468
-
1469
- /**
1470
- * Uint8Array 实例扩展
1471
- */
1472
- interface Uint8Array {
1473
- /**
1474
- * 从字符串设置值
1475
- * @param str 字符串
1476
- * @param targetOffset 目标偏移量
1477
- * @returns 设置后的对象
1478
- */
1479
- setFromString(str: string, targetOffset?: number): Object;
1480
-
1481
- /**
1482
- * 从十六进制字符串设置值
1483
- * @param str 十六进制字符串
1484
- * @param targetOffset 目标偏移量
1485
- * @returns 设置后的对象
1486
- */
1487
- $setFromHex(str: string, targetOffset?: number): Object;
1488
-
1489
- /**
1490
- * 从 Base64 字符串设置值
1491
- * @param str Base64 字符串
1492
- * @param targetOffset 目标偏移量
1493
- * @returns 设置后的对象
1494
- */
1495
- $setFromBase64(str: string, targetOffset?: number): Object;
1496
-
1497
- /**
1498
- * 转换为字符串
1499
- * @returns 转换后的字符串
1500
- */
1501
- toString(): string;
1502
-
1503
- /**
1504
- * 转换为十六进制字符串
1505
- * @returns 十六进制字符串
1506
- */
1507
- $toHex(): string;
1508
-
1509
- /**
1510
- * 转换为 Base64 字符串
1511
- * @returns Base64 字符串
1512
- */
1513
- $toBase64(): string;
1514
-
1515
- /**
1516
- * 转换为数组
1517
- * @returns 转换后的数组
1518
- */
1519
- toArray(): number[];
1520
- }
1521
-
1522
- /**
1523
- * Math 扩展
1524
- */
1525
- interface Math {
1526
- /**
1527
- * 生成随机字符串
1528
- * @param len 长度
1529
- * @param slen 特殊字符长度
1530
- * @param chars 字符集
1531
- * @param schars 特殊字符集
1532
- * @returns 随机字符串
1533
- */
1534
- randstr(len?: number, slen?: number, chars?: string, schars?: string): string;
1535
-
1536
- /**
1537
- * 生成随机整数
1538
- * @param min 最小值
1539
- * @param max 最大值
1540
- * @returns 随机整数
1541
- */
1542
- randint(min?: number, max?: number): number;
1543
-
1544
- /**
1545
- * 生成递增 ID
1546
- * @returns 递增 ID
1547
- */
1548
- incrid(): number;
1549
-
1550
- /**
1551
- * 生成递增字符串
1552
- * @returns 递增字符串
1553
- */
1554
- incrstr(): string;
1555
-
1556
- /**
1557
- * 生成唯一 ID
1558
- * @param now 时间戳
1559
- * @returns 唯一 ID
1560
- */
1561
- uniqid(now?: number): number;
1562
-
1563
- /**
1564
- * 生成唯一字符串
1565
- * @returns 唯一字符串
1566
- */
1567
- uniqstr(): string;
1568
-
1569
- /**
1570
- * 睡眠指定时间
1571
- * @param duration 持续时间(毫秒)
1572
- * @returns Promise
1573
- */
1574
- sleep(duration: number): Promise<void>;
1575
-
1576
- /**
1577
- * 使用模板
1578
- * @param name 模板名称
1579
- * @returns 模板内容
1580
- */
1581
- useTemplate(name: string): any;
1582
- }
1583
-
1584
- /**
1585
- * LRU 缓存类
1586
- */
1587
- class LRU<K, V> extends Map<K, V> {
1588
- /**
1589
- * 构造函数
1590
- * @param capacity 容量
1591
- */
1592
- constructor(capacity: number);
1593
-
1594
- /**
1595
- * 获取值
1596
- * @param key 键
1597
- * @returns 值或 undefined
1598
- */
1599
- get(key: K): V | undefined;
1600
-
1601
- /**
1602
- * 获取值,如果不存在则插入默认值
1603
- * @param key 键
1604
- * @param defval 默认值
1605
- * @returns 值
1606
- */
1607
- getOrInsert(key: K, defval: V): V;
1608
-
1609
- /**
1610
- * 获取值,如果不存在则计算并插入
1611
- * @param key 键
1612
- * @param callback 计算函数
1613
- * @returns 值
1614
- */
1615
- getOrInsertComputed(key: K, callback: (key: K) => V): V;
1616
-
1617
- /**
1618
- * 异步获取值,如果不存在则计算并插入
1619
- * @param key 键
1620
- * @param callback 异步计算函数
1621
- * @returns Promise,解析为值
1622
- */
1623
- getOrInsertComputedAsync(key: K, callback: (key: K) => Promise<V>): Promise<V>;
1624
-
1625
- /**
1626
- * 设置键值对
1627
- * @param key 键
1628
- * @param value 值
1629
- * @returns LRU 实例
1630
- */
1631
- set(key: K, value: V): this;
1632
-
1633
- /**
1634
- * 设置键值对(别名)
1635
- * @param key 键
1636
- * @param value 值
1637
- * @returns LRU 实例
1638
- */
1639
- put(key: K, value: V): this;
1640
- }
1641
-
1642
- /**
1643
- * LRU 构造函数接口
1644
- */
1645
- interface LRUConstructor {
1646
- /**
1647
- * 创建一个新的 LRU 实例
1648
- * @param capacity 容量
1649
- */
1650
- new <K, V>(capacity: number): LRU<K, V>;
1651
- }
1652
- }
1653
-
1654
- export {}
1
+ // Copyright 2021 The dotcoo <dotcoo@163.com>. All rights reserved.
2
+
3
+ /**
4
+ * ES 扩展类型定义
5
+ * 为 JavaScript 内置对象添加扩展方法
6
+ */
7
+ declare global {
8
+ /**
9
+ * Object 构造函数扩展
10
+ */
11
+ interface ObjectConstructor {
12
+ /**
13
+ * 创建一个新的 Object 实例
14
+ */
15
+ new(): Record<string, any>;
16
+
17
+ /**
18
+ * 检查一个值是否为对象
19
+ * @param o 要检查的值
20
+ * @returns 如果是对象返回 true,否则返回 false
21
+ */
22
+ isObject(o: any): boolean;
23
+
24
+ /**
25
+ * 合并多个对象
26
+ * @param args 要合并的对象列表
27
+ * @returns 合并后的新对象
28
+ */
29
+ merge(...args: Record<string, any>[]): Record<string, any>;
30
+
31
+ /**
32
+ * 连接多个对象
33
+ * @param args 要连接的对象列表, 数组会合并, 而不是覆盖
34
+ * @returns 连接后的新对象
35
+ */
36
+ concat(...args: Record<string, any>[]): Record<string, any>;
37
+ }
38
+
39
+ /**
40
+ * Object 实例扩展
41
+ */
42
+ interface Object {
43
+ /**
44
+ * 克隆对象
45
+ * @returns 克隆后的新对象
46
+ */
47
+ $clone(): Record<string, any>;
48
+
49
+ /**
50
+ * 获取对象的长度(属性数量)
51
+ * @returns 对象的属性数量
52
+ */
53
+ $length(): number;
54
+
55
+ /**
56
+ * 获取对象的键值对迭代器
57
+ * @returns 键值对迭代器
58
+ */
59
+ $entries(): [string, any][];
60
+
61
+ /**
62
+ * 获取对象的键迭代器
63
+ * @returns 键迭代器
64
+ */
65
+ $keys(): string[];
66
+
67
+ /**
68
+ * 获取对象的值迭代器
69
+ * @returns 值迭代器
70
+ */
71
+ $values(): any[];
72
+
73
+ /**
74
+ * 分配属性到对象
75
+ * @param args 要分配的属性源
76
+ * @returns 分配后的对象
77
+ */
78
+ $assign(...sources: any[]): Record<string, any>;
79
+
80
+ /**
81
+ * 将值转换为 JSON 字符串
82
+ * @param v 要转换的值
83
+ * @param replacer 替换函数或数组
84
+ * @param space 缩进空格
85
+ * @returns JSON 字符串
86
+ */
87
+ $stringify(replacer?: any, space?: string | number): string;
88
+
89
+ /**
90
+ * 合并多个对象到当前对象
91
+ * @param args 要合并的对象列表
92
+ * @returns 合并后的对象
93
+ */
94
+ $merge(...args: Record<string, any>[]): Record<string, any>;
95
+
96
+ /**
97
+ * 连接多个对象到当前对象
98
+ * @param args 要连接的对象列表, 数组会合并, 而不是覆盖
99
+ * @returns 连接后的对象
100
+ */
101
+ $concat(...args: Record<string, any>[]): Record<string, any>;
102
+
103
+ /**
104
+ * 检查对象是否为空
105
+ * @returns 如果对象为空返回 true,否则返回 false
106
+ */
107
+ $empty(): boolean;
108
+
109
+ /**
110
+ * 检查对象是否包含指定键
111
+ * @param key 要检查的键
112
+ * @returns 如果包含指定键返回 true,否则返回 false
113
+ */
114
+ $has(key: string): boolean;
115
+
116
+ /**
117
+ * 从对象中选取指定键的属性
118
+ * @param keys 要选取的键列表
119
+ * @returns 包含指定键属性的新对象
120
+ */
121
+ $pick(...keys: string[]): Record<string, any>;
122
+
123
+ /**
124
+ * 从对象中排除指定键的属性
125
+ * @param keys 要排除的键列表
126
+ * @returns 排除指定键属性的新对象
127
+ */
128
+ $omit(...keys: string[]): Record<string, any>;
129
+
130
+ /**
131
+ * 获取对象的属性
132
+ * @param key 属性键
133
+ * @returns 属性值
134
+ */
135
+ $attr(key: string): any;
136
+
137
+ /**
138
+ * 设置对象的属性
139
+ * @param key 属性键
140
+ * @param val 属性值
141
+ * @returns 当前对象
142
+ */
143
+ $attr(key: string, val: any): this;
144
+
145
+ /**
146
+ * 获取对象的属性(带默认值)
147
+ * @param key 属性键
148
+ * @param val 属性值
149
+ * @param defval 默认值
150
+ * @returns 属性值
151
+ */
152
+ $attr(key: string, defval: any, options: { defval: any }): any;
153
+
154
+ /**
155
+ * 设置对象的属性(带存在性检查)
156
+ * @param key 属性键
157
+ * @param val 属性值
158
+ * @param exists 是否检查属性是否存在
159
+ * @returns 当前对象
160
+ */
161
+ $attr(key: string, val: any, options: { exists: boolean }): this;
162
+
163
+ /**
164
+ * 设置对象的属性(带存在性检查)
165
+ * @param key 属性键
166
+ * @param val 属性值
167
+ * @param define 属性定义
168
+ * @returns 当前对象
169
+ */
170
+ $attr(key: string, val: any, options: { define: any }): this;
171
+
172
+ /**
173
+ * 属性四则运算(带定义选项)
174
+ * @param key 属性键
175
+ * @param val 属性值
176
+ * @param defval 默认值
177
+ * @param add 加法值
178
+ * @param sub 减法值
179
+ * @param mul 乘法值
180
+ * @param div 除法值
181
+ * @returns 当前对象
182
+ */
183
+ $attr(key: string, val: any, options: { defval: any, add: number, sub: number, mul: number, div: number }): this;
184
+
185
+ /**
186
+ * 通过管道函数处理对象
187
+ * @param pipe 管道函数
188
+ * @param args 额外参数
189
+ * @returns 管道函数的返回值
190
+ */
191
+ $pipe<T>(pipe: (value: this, ...args: any[]) => T, ...args: any[]): T;
192
+
193
+ /**
194
+ * 执行副作用函数并返回原对象
195
+ * @param tee 副作用函数
196
+ * @param args 额外参数
197
+ * @returns 原对象
198
+ */
199
+ $tee(tee: (value: this, ...args: any[]) => void, ...args: any[]): this;
200
+
201
+ /**
202
+ * 将对象转换为数组
203
+ * @returns 对象转换后的数组
204
+ */
205
+ $toArray(): any[];
206
+
207
+ /**
208
+ * 输出调试信息
209
+ * @param args 调试信息
210
+ * @returns 原对象
211
+ */
212
+ $debug(...args: any[]): this;
213
+
214
+ /**
215
+ * 输出日志信息
216
+ * @param args 日志信息
217
+ * @returns 原对象
218
+ */
219
+ $log(...args: any[]): this;
220
+
221
+ /**
222
+ * 输出信息
223
+ * @param args 信息
224
+ * @returns 原对象
225
+ */
226
+ $info(...args: any[]): this;
227
+
228
+ /**
229
+ * 输出警告信息
230
+ * @param args 警告信息
231
+ * @returns 原对象
232
+ */
233
+ $warn(...args: any[]): this;
234
+
235
+ /**
236
+ * 输出错误信息
237
+ * @param args 错误信息
238
+ * @returns 原对象
239
+ */
240
+ $error(...args: any[]): this;
241
+
242
+ /**
243
+ * 输出对象的详细信息
244
+ * @param args 额外参数
245
+ * @returns 原对象
246
+ */
247
+ $dir(...args: any[]): this;
248
+
249
+ /**
250
+ * 触发调试器断点
251
+ * @param args 额外参数
252
+ * @returns 原对象
253
+ */
254
+ $debugger(...args: any[]): this;
255
+
256
+ /**
257
+ * 获取对象的父级链
258
+ * @param self 是否包含自身
259
+ * @param depth 深度限制
260
+ * @param parent 父级属性名
261
+ * @returns 父级链数组
262
+ */
263
+ $getParents(self?: boolean, depth?: number, parent?: string): any[];
264
+
265
+ /**
266
+ * 获取对象的子级链
267
+ * @param self 是否包含自身
268
+ * @param depth 深度限制
269
+ * @param children 子级属性名
270
+ * @returns 子级链数组
271
+ */
272
+ $getChildrens(self?: boolean, depth?: number, children?: string): any[];
273
+
274
+ /**
275
+ * 在树结构中查找节点
276
+ * @param cb 查找回调函数
277
+ * @param self 是否包含自身
278
+ * @param depth 深度限制
279
+ * @param children 子级属性名
280
+ * @returns 找到的节点
281
+ */
282
+ $tree$find(cb: (node: any) => boolean, self?: boolean, depth?: number, children?: string): any;
283
+
284
+ /**
285
+ * 遍历树结构中的节点
286
+ * @param cb 遍历回调函数
287
+ * @param self 是否包含自身
288
+ * @param depth 深度限制
289
+ * @param children 子级属性名
290
+ */
291
+ $tree$each(cb: (node: any) => void, self?: boolean, depth?: number, children?: string): void;
292
+
293
+ /**
294
+ * 映射树结构中的节点
295
+ * @param cb 映射回调函数
296
+ * @param self 是否包含自身
297
+ * @param depth 深度限制
298
+ * @param children 子级属性名
299
+ * @param empty 空值处理
300
+ * @returns 映射后的树结构
301
+ */
302
+ $tree$map(cb: (node: any) => any, self?: boolean, depth?: number, children?: string, empty?: any): any;
303
+ }
304
+
305
+ /**
306
+ * Number 实例扩展
307
+ */
308
+ interface Number {
309
+ /**
310
+ * 向上取整
311
+ * @returns 向上取整后的值
312
+ */
313
+ ceil(): number;
314
+
315
+ /**
316
+ * 向下取整
317
+ * @returns 向下取整后的值
318
+ */
319
+ floor(): number;
320
+
321
+ /**
322
+ * 截断小数部分
323
+ * @returns 截断后的值
324
+ */
325
+ trunc(): number;
326
+
327
+ /**
328
+ * 获取绝对值
329
+ * @returns 绝对值
330
+ */
331
+ abs(): number;
332
+
333
+ /**
334
+ * 获取最大值
335
+ * @param args 比较值列表
336
+ * @returns 最大值
337
+ */
338
+ max(...args: number[]): number;
339
+
340
+ /**
341
+ * 获取最小值
342
+ * @param args 比较值列表
343
+ * @returns 最小值
344
+ */
345
+ min(...args: number[]): number;
346
+
347
+ /**
348
+ * 固定小数位数
349
+ * @param decimal 小数位数
350
+ * @returns 固定小数位数后的值
351
+ */
352
+ fixed(decimal?: number): number;
353
+
354
+ /**
355
+ * 四舍五入
356
+ * @param precision 精度
357
+ * @returns 四舍五入后的值
358
+ */
359
+ round(precision?: number): number;
360
+
361
+ /**
362
+ * 加法运算
363
+ * @param v 加数
364
+ * @returns 加法结果
365
+ */
366
+ add(v: number): number;
367
+
368
+ /**
369
+ * 使用函数进行加法运算
370
+ * @param v 加法函数
371
+ * @param args 函数参数
372
+ * @returns 加法结果
373
+ */
374
+ add(v: ((v:number, ...args: any[]) => number), ...args: any[]): number;
375
+
376
+ /**
377
+ * 减法运算
378
+ * @param v 减数
379
+ * @returns 减法结果
380
+ */
381
+ sub(v: number): number;
382
+
383
+ /**
384
+ * 使用函数进行减法运算
385
+ * @param v 减法函数
386
+ * @param args 函数参数
387
+ * @returns 减法结果
388
+ */
389
+ sub(v: ((v:number, ...args: any[]) => number), ...args: any[]): number;
390
+
391
+ /**
392
+ * 乘法运算
393
+ * @param v 乘数
394
+ * @returns 乘法结果
395
+ */
396
+ mul(v: number): number;
397
+
398
+ /**
399
+ * 使用函数进行乘法运算
400
+ * @param v 乘法函数
401
+ * @param args 函数参数
402
+ * @returns 乘法结果
403
+ */
404
+ mul(v: ((v:number, ...args: any[]) => number), ...args: any[]): number;
405
+
406
+ /**
407
+ * 除法运算
408
+ * @param v 除数
409
+ * @returns 除法结果
410
+ */
411
+ div(v: number): number;
412
+
413
+ /**
414
+ * 使用函数进行除法运算
415
+ * @param v 除法函数
416
+ * @param args 函数参数
417
+ * @returns 除法结果
418
+ */
419
+ div(v: ((v:number, ...args: any[]) => number), ...args: any[]): number;
420
+
421
+ /**
422
+ * 进制转换
423
+ * @param base 目标进制
424
+ * @returns 转换后的字符串
425
+ */
426
+ baseConvert(base?: number): string;
427
+
428
+ /**
429
+ * 单位转换
430
+ * @param units 单位定义
431
+ * @param decimal 小数位数
432
+ * @returns 转换后的字符串
433
+ */
434
+ unit(units: Record<string, number>, decimal?: number): string;
435
+
436
+ /**
437
+ * 单位转换(支持数组输出)
438
+ * @param units 单位定义
439
+ * @param array 是否返回数组
440
+ * @returns 转换后的字符串或数组
441
+ */
442
+ units(units: Record<string, number>, array?: boolean): string | [number, string][];
443
+
444
+ /**
445
+ * 转换为日期对象
446
+ * @returns 日期对象
447
+ */
448
+ toDate(): Date;
449
+ }
450
+
451
+ /**
452
+ * BigInt 实例扩展
453
+ */
454
+ interface BigInt {
455
+ /**
456
+ * 转换为 JSON 格式
457
+ * @returns 转换后的数字或字符串
458
+ */
459
+ toJSON(): number | string;
460
+ }
461
+
462
+ /**
463
+ * String 构造函数扩展
464
+ */
465
+ interface StringConstructor {
466
+ /**
467
+ * 创建一个新的 String 实例
468
+ */
469
+ new(): string;
470
+ }
471
+
472
+ /**
473
+ * String 实例扩展
474
+ */
475
+ interface String {
476
+ /**
477
+ * 获取字符串长度
478
+ * @returns 字符串长度
479
+ */
480
+ $length(): number;
481
+
482
+ /**
483
+ * 截取子字符串
484
+ * @param s 开始位置
485
+ * @param e 结束位置
486
+ * @returns 截取的子字符串
487
+ */
488
+ $substring(s?: number, e?: number): string;
489
+
490
+ /**
491
+ * 截取子字符串(从指定位置开始)
492
+ * @param s 开始位置
493
+ * @param e 长度
494
+ * @returns 截取的子字符串
495
+ */
496
+ $substr(s?: number, e?: number): string;
497
+
498
+ /**
499
+ * 分割字符串
500
+ * @param s 分隔符
501
+ * @param n 分割数量
502
+ * @returns 分割后的数组
503
+ */
504
+ $split(s?: string, n?: number): string[];
505
+
506
+ /**
507
+ * 分割字符串并转换为数字数组
508
+ * @param s 分隔符
509
+ * @returns 数字数组
510
+ */
511
+ $split$number(s?: string): number[];
512
+
513
+ /**
514
+ * 按指定长度分割字符串
515
+ * @param n 分割长度
516
+ * @returns 分割后的数组
517
+ */
518
+ $split$segment(n?: number): string[];
519
+
520
+ /**
521
+ * 格式化字符串
522
+ * @param args 格式化参数
523
+ * @returns 格式化后的字符串
524
+ */
525
+ sprintf(...args: any[]): string;
526
+
527
+ /**
528
+ * 提取两个字符串之间的内容
529
+ * @param begin 开始字符串
530
+ * @param end 结束字符串
531
+ * @param n 提取数量
532
+ * @param position 开始位置
533
+ * @returns 提取的内容
534
+ */
535
+ subOf(begin: string, end: string, n?: number, position?: number): string;
536
+
537
+ /**
538
+ * 从末尾提取两个字符串之间的内容
539
+ * @param begin 开始字符串
540
+ * @param end 结束字符串
541
+ * @param n 提取数量
542
+ * @param position 开始位置
543
+ * @returns 提取的内容
544
+ */
545
+ lastSubOf(begin: string, end: string, n?: number, position?: number): string;
546
+
547
+ /**
548
+ * 驼峰命名转换为下划线命名
549
+ * @returns 下划线命名的字符串
550
+ */
551
+ camel2under(): string;
552
+
553
+ /**
554
+ * 下划线命名转换为驼峰命名
555
+ * @returns 驼峰命名的字符串
556
+ */
557
+ under2camel(): string;
558
+
559
+ /**
560
+ * 驼峰命名转换为帕斯卡命名
561
+ * @returns 帕斯卡命名的字符串
562
+ */
563
+ camel2pascal(): string;
564
+
565
+ /**
566
+ * 帕斯卡命名转换为驼峰命名
567
+ * @returns 驼峰命名的字符串
568
+ */
569
+ pascal2camel(): string;
570
+
571
+ /**
572
+ * 下划线命名转换为短横线命名
573
+ * @returns 短横线命名的字符串
574
+ */
575
+ under2kebab(): string;
576
+
577
+ /**
578
+ * 短横线命名转换为下划线命名
579
+ * @returns 下划线命名的字符串
580
+ */
581
+ kebab2under(): string;
582
+
583
+ /**
584
+ * 进制转换
585
+ * @param base 目标进制
586
+ * @returns 转换后的字符串
587
+ */
588
+ baseConvert(base?: number): string;
589
+
590
+ /**
591
+ * 固定小数位数
592
+ * @param decimal 小数位数
593
+ * @returns 固定小数位数后的字符串
594
+ */
595
+ fixed(decimal?: number): string;
596
+
597
+ /**
598
+ * 转换为日期对象
599
+ * @returns 日期对象
600
+ */
601
+ toDate(): Date;
602
+
603
+ /**
604
+ * 转换为 Uint8Array
605
+ * @returns Uint8Array
606
+ */
607
+ toUint8Array(): Uint8Array;
608
+
609
+ /**
610
+ * 十六进制编码
611
+ * @returns 十六进制编码的字符串
612
+ */
613
+ hexencode(): string;
614
+
615
+ /**
616
+ * 十六进制解码
617
+ * @returns 解码后的字符串
618
+ */
619
+ hexdecode(): string;
620
+
621
+ /**
622
+ * Base64 编码
623
+ * @returns Base64 编码的字符串
624
+ */
625
+ base64encode(): string;
626
+
627
+ /**
628
+ * Base64 解码
629
+ * @returns 解码后的字符串
630
+ */
631
+ base64decode(): string;
632
+ }
633
+
634
+ /**
635
+ * Array 构造函数扩展
636
+ */
637
+ interface ArrayConstructor {
638
+ /**
639
+ * 创建一个新的数组实例
640
+ */
641
+ new(): any[];
642
+
643
+ /**
644
+ * 创建一个新的泛型数组实例
645
+ */
646
+ new<T>(): T[];
647
+
648
+ /**
649
+ * 通过元素创建一个新的数组实例
650
+ * @param items 数组元素
651
+ */
652
+ new<T>(...items: T[]): T[];
653
+
654
+ /**
655
+ * 通过长度创建一个新的数组实例
656
+ * @param length 数组长度
657
+ */
658
+ new<T>(length: number): T[];
659
+
660
+ /**
661
+ * 创建一个范围数组
662
+ * @param end 结束值
663
+ * @param callback 回调函数
664
+ * @param input 是否将索引作为输入
665
+ * @returns 范围数组
666
+ */
667
+ range<T>(end: number, callback?: ((number: number, i: number, a: T[]) => T), input?: boolean): T[];
668
+
669
+ /**
670
+ * 创建一个范围数组
671
+ * @param start 开始值
672
+ * @param end 结束值
673
+ * @param callback 回调函数
674
+ * @param input 是否将索引作为输入
675
+ * @returns 范围数组
676
+ */
677
+ range<T>(start: number, end: number, callback?: ((number: number, i: number, a: T[]) => T), input?: boolean): T[];
678
+
679
+ /**
680
+ * 创建一个范围数组
681
+ * @param start 开始值
682
+ * @param end 结束值
683
+ * @param step 步长
684
+ * @param callback 回调函数
685
+ * @param input 是否将索引作为输入
686
+ * @returns 范围数组
687
+ */
688
+ range<T>(start: number, end: number, step: number, callback?: ((number: number, i: number, a: T[]) => T), input?: boolean): T[];
689
+ }
690
+
691
+ /**
692
+ * Array 实例扩展
693
+ */
694
+ interface Array<T> {
695
+ /**
696
+ * 获取数组长度
697
+ * @returns 数组长度
698
+ */
699
+ $length(): number;
700
+
701
+ /**
702
+ * 获取数组的键值对迭代器
703
+ * @returns 键值对迭代器
704
+ */
705
+ $entries(): [number, T][];
706
+
707
+ /**
708
+ * 获取数组的键迭代器
709
+ * @returns 键迭代器
710
+ */
711
+ $keys(): number[];
712
+
713
+ /**
714
+ * 获取数组的值迭代器
715
+ * @returns 值迭代器
716
+ */
717
+ $values(): T[];
718
+
719
+ /**
720
+ * 映射数组元素
721
+ * @param callback 映射函数
722
+ * @returns 映射后的新数组
723
+ */
724
+ $map<U>(callback: (v: T, i: number, array: T[]) => U): U[];
725
+
726
+ /**
727
+ * 向数组末尾添加元素, 并返回当前数组
728
+ * @param items 要添加的元素
729
+ * @returns 添加后的数组
730
+ */
731
+ $push(...items: T[]): T[];
732
+
733
+ /**
734
+ * 从数组末尾移除元素, 并返回当前数组
735
+ * @returns 移除元素后的数组
736
+ */
737
+ $pop(): T[];
738
+
739
+ /**
740
+ * 从数组开头移除元素, 并返回当前数组
741
+ * @returns 移除元素后的数组
742
+ */
743
+ $shift(): T[];
744
+
745
+ /**
746
+ * 向数组开头添加元素, 并返回当前数组
747
+ * @param items 要添加的元素
748
+ * @returns 添加后的数组
749
+ */
750
+ $unshift(...items: T[]): T[];
751
+
752
+ /**
753
+ * 从数组中删除元素并添加新元素, 并返回当前数组
754
+ * @param start 开始位置
755
+ * @param deleteCount 删除数量
756
+ * @param items 要添加的元素
757
+ * @returns 被删除的元素数组
758
+ */
759
+ $splice(start: number, deleteCount?: number, ...items: T[]): T[];
760
+
761
+ /**
762
+ * 向数组末尾添加元素(返回添加的元素)
763
+ * @param items 要添加的元素
764
+ * @returns 添加后的数组
765
+ */
766
+ $pusha(...items: T[]): T[];
767
+
768
+ /**
769
+ * 向数组开头添加元素(返回添加的元素)
770
+ * @param items 要添加的元素
771
+ * @returns 添加后的数组
772
+ */
773
+ $unshifta(...items: T[]): T[];
774
+
775
+ /**
776
+ * 向数组末尾添加元素(返回第一个添加的元素)
777
+ * @param items 要添加的元素
778
+ * @returns 第一个添加的元素
779
+ */
780
+ $push0(...items: T[]): T;
781
+
782
+ /**
783
+ * 向数组开头添加元素(返回第一个添加的元素)
784
+ * @param items 要添加的元素
785
+ * @returns 第一个添加的元素
786
+ */
787
+ $unshift0(...items: T[]): T;
788
+
789
+ /**
790
+ * 检查数组是否为空
791
+ * @returns 如果数组为空返回 true,否则返回 false
792
+ */
793
+ $empty(): boolean;
794
+
795
+ /**
796
+ * 获取数组的第一个元素
797
+ * @param defval 默认值
798
+ * @returns 第一个元素或默认值
799
+ */
800
+ first(defval?: T): T;
801
+
802
+ /**
803
+ * 获取数组的最后一个元素
804
+ * @param defval 默认值
805
+ * @returns 最后一个元素或默认值
806
+ */
807
+ last(defval?: T): T;
808
+
809
+ /**
810
+ * 查找数组中的元素
811
+ * @param cb 查找回调函数
812
+ * @param defval 默认值
813
+ * @returns 找到的元素或默认值
814
+ */
815
+ $find(cb: (value: T, index: number, array: T[]) => boolean, defval?: T): T;
816
+
817
+ /**
818
+ * 比较两个数组是否相等
819
+ * @param a 要比较的数组
820
+ * @returns 如果相等返回 true,否则返回 false
821
+ */
822
+ equals(a: T[]): boolean;
823
+
824
+ /**
825
+ * 去重数组元素
826
+ * @param cb 比较函数
827
+ * @returns 去重后的新数组
828
+ */
829
+ unique(cb?: (value: T) => any): T[];
830
+
831
+ /**
832
+ * 遍历数组元素
833
+ * @param cb 遍历回调函数
834
+ * @returns 原数组
835
+ */
836
+ each(cb: (value: T, index: number, array: T[]) => void): T[];
837
+
838
+ /**
839
+ * 异步遍历数组元素
840
+ * @param cb 异步遍历回调函数
841
+ * @returns Promise,解析为原数组
842
+ */
843
+ each$async(cb: (value: T, index: number, array: T[]) => Promise<void>): Promise<T[]>;
844
+
845
+ /**
846
+ * 异步映射数组元素
847
+ * @param cb 异步映射函数
848
+ * @returns Promise,解析为映射后的新数组
849
+ */
850
+ map$async<U>(cb: (value: T, index: number, array: T[]) => Promise<U>): Promise<U[]>;
851
+
852
+ /**
853
+ * 打乱数组元素
854
+ * @param clone 是否克隆数组
855
+ * @returns 打乱后的数组
856
+ */
857
+ shuffle(clone?: boolean): T[];
858
+
859
+ /**
860
+ * 计算两个数组的并集
861
+ * @param a 另一个数组
862
+ * @returns 并集数组
863
+ */
864
+ union(a: T[]): T[];
865
+
866
+ /**
867
+ * 计算两个数组的交集
868
+ * @param a 另一个数组
869
+ * @returns 交集数组
870
+ */
871
+ intersection(a: T[]): T[];
872
+
873
+ /**
874
+ * 计算两个数组的差集
875
+ * @param a 另一个数组
876
+ * @returns 差集数组
877
+ */
878
+ difference(a: T[]): T[];
879
+
880
+ /**
881
+ * 计算两个数组的对称差集
882
+ * @param a 另一个数组
883
+ * @returns 对称差集数组
884
+ */
885
+ symmetricDifference(a: T[]): T[];
886
+
887
+ /**
888
+ * 转换为 Map
889
+ * @param cb 转换函数
890
+ * @returns 转换后的 Map
891
+ */
892
+ toMap(cb?: (value: T, index: number) => [any, any]): Map<any, any>;
893
+
894
+ /**
895
+ * 转换为 Set
896
+ * @param cb 转换函数
897
+ * @returns 转换后的 Set
898
+ */
899
+ toSet(cb?: (value: T) => any): Set<any>;
900
+
901
+ /**
902
+ * 转换为 Uint8Array
903
+ * @returns 转换后的 Uint8Array
904
+ */
905
+ toUint8Array(): Uint8Array;
906
+
907
+ /**
908
+ * 转换为 Base64 字符串
909
+ * @returns Base64 字符串
910
+ */
911
+ toBase64(): string;
912
+
913
+ /**
914
+ * 转换为十六进制字符串
915
+ * @returns 十六进制字符串
916
+ */
917
+ toHex(): string;
918
+
919
+ /**
920
+ * 解码字符串
921
+ * @returns 解码后的字符串
922
+ */
923
+ decode(): string;
924
+
925
+ assoc(id: keyof T & string, prop: keyof T & string, assoc?: Record<string, any> | ((ids: T[]) => Record<string, any>)): this;
926
+ toTree(o?: { id?: string; pid?: string; level?: string; root?: string; parent?: string; children?: string; empty?: any; hasRoot?: boolean }): any;
927
+ $tree2tree(o?: { id?: string; pid?: string; level?: string; root?: string; parent?: string; children?: string; empty?: any }, r?: any, p?: any): any;
928
+ $tree$find(cb: (value: any) => boolean, self?: boolean, depth?: number, children?: string): any | null;
929
+ $tree$each(cb: (value: any) => void, self?: boolean, depth?: number, children?: string): this;
930
+ $tree$map<U>(cb: (value: any) => U, self?: boolean, depth?: number, children?: string, empty?: any): U[];
931
+ }
932
+
933
+ /**
934
+ * Map 构造函数扩展
935
+ */
936
+ interface MapConstructor {
937
+ /**
938
+ * 创建一个新的 Map 实例
939
+ */
940
+ new<K, V>(): Map<K, V>;
941
+
942
+ /**
943
+ * 通过迭代器创建一个新的 Map 实例
944
+ * @param iterator 迭代器
945
+ */
946
+ new<K, V>(iterator: Iterator<K, V, V>): Map<K, V>;
947
+ }
948
+
949
+ /**
950
+ * Map 实例扩展
951
+ */
952
+ interface Map<K, V> {
953
+ /**
954
+ * 获取 Map 的大小
955
+ * @returns Map 的大小
956
+ */
957
+ $length(): number;
958
+
959
+ /**
960
+ * 获取 Map 的键值对迭代器
961
+ * @returns 键值对迭代器
962
+ */
963
+ $entries(): IterableIterator<[K, V]>;
964
+
965
+ /**
966
+ * 获取 Map 的键迭代器
967
+ * @returns 键迭代器
968
+ */
969
+ $keys(): IterableIterator<K>;
970
+
971
+ /**
972
+ * 获取 Map 的值迭代器
973
+ * @returns 值迭代器
974
+ */
975
+ $values(): IterableIterator<V>;
976
+
977
+ /**
978
+ * 设置键值对, 并返回当前Map
979
+ * @param key 键
980
+ * @param value 值
981
+ * @returns Map 实例
982
+ */
983
+ $set(key: K, value: V): Map<K, V>;
984
+
985
+ /**
986
+ * 删除键值对, 并返回当前Map
987
+ * @param key 键
988
+ * @returns Map 实例
989
+ */
990
+ $delete(key: K): Map<K, V>;
991
+
992
+ /**
993
+ * 设置键值对并返回键值对数组
994
+ * @param key 键
995
+ * @param value 值
996
+ * @returns 键值对数组
997
+ */
998
+ $seta(key: K, value: V): [K, V];
999
+
1000
+ /**
1001
+ * 删除键值对并返回键数组
1002
+ * @param key 键
1003
+ * @returns 键数组
1004
+ */
1005
+ $deletea(key: K): [K];
1006
+
1007
+ /**
1008
+ * 设置键值对并返回键
1009
+ * @param key 键
1010
+ * @param value 值
1011
+ * @returns 键
1012
+ */
1013
+ $set0(key: K, value: V): K;
1014
+
1015
+ /**
1016
+ * 删除键值对并返回键
1017
+ * @param key 键
1018
+ * @returns 键
1019
+ */
1020
+ $delete0(key: K): K;
1021
+
1022
+ /**
1023
+ * 设置键值对并返回值
1024
+ * @param key 键
1025
+ * @param value 值
1026
+ * @returns 值
1027
+ */
1028
+ $set1(key: K, value: V): V;
1029
+
1030
+ /**
1031
+ * 删除键值对并返回值
1032
+ * @param key 键
1033
+ * @returns 值
1034
+ */
1035
+ $delete1(key: K): V;
1036
+
1037
+ /**
1038
+ * 获取值,如果不存在则插入默认值
1039
+ * @param key 键
1040
+ * @param defval 默认值
1041
+ * @returns 值
1042
+ */
1043
+ $getOrInsert(key: K, defval?: V): V;
1044
+
1045
+ /**
1046
+ * 获取值,如果不存在则计算并插入
1047
+ * @param key 键
1048
+ * @param callback 计算函数
1049
+ * @returns 值
1050
+ */
1051
+ $getOrInsertComputed(key: K, callback: (key: K) => V): V;
1052
+
1053
+ /**
1054
+ * 获取值,如果不存在则返回默认值
1055
+ * @param key 键
1056
+ * @param defval 默认值或计算函数
1057
+ * @returns 值
1058
+ */
1059
+ $get(key: K, defval?: V | ((key: K) => V)): V;
1060
+
1061
+ /**
1062
+ * 异步获取值,如果不存在则返回默认值
1063
+ * @param key 键
1064
+ * @param defval 默认值或异步计算函数
1065
+ * @returns Promise,解析为值
1066
+ */
1067
+ $get$async(key: K, defval?: V | ((key: K) => Promise<V>)): Promise<V>;
1068
+
1069
+ /**
1070
+ * 转换为对象
1071
+ * @returns 转换后的对象
1072
+ */
1073
+ toObject(): Record<string, V>;
1074
+
1075
+ /**
1076
+ * 转换为数组
1077
+ * @returns 转换后的数组
1078
+ */
1079
+ toArray(): [K, V][];
1080
+
1081
+ /**
1082
+ * 转换为 JSON 格式
1083
+ * @returns 转换后的数组
1084
+ */
1085
+ toJSON(): [K, V][];
1086
+
1087
+ /**
1088
+ * 获取值,如果不存在则插入默认值
1089
+ * @param key 键
1090
+ * @param defval 默认值
1091
+ * @returns 值
1092
+ */
1093
+ getOrInsert(key: K, defval?: V): V;
1094
+
1095
+ /**
1096
+ * 获取值,如果不存在则计算并插入
1097
+ * @param key 键
1098
+ * @param callback 计算函数
1099
+ * @returns 值
1100
+ */
1101
+ getOrInsertComputed(key: K, callback: (key: K) => V): V;
1102
+ }
1103
+
1104
+ /**
1105
+ * Set 构造函数扩展
1106
+ */
1107
+ interface SetConstructor {
1108
+ /**
1109
+ * 创建一个新的 Set 实例
1110
+ */
1111
+ new<T>(): Set<T>;
1112
+
1113
+ /**
1114
+ * 通过迭代器创建一个新的 Set 实例
1115
+ * @param iterator 迭代器
1116
+ */
1117
+ new<T>(iterator: Iterator<T, T, T>): Set<T>;
1118
+ }
1119
+
1120
+ /**
1121
+ * Set 实例扩展
1122
+ */
1123
+ interface Set<T> {
1124
+ /**
1125
+ * 获取 Set 的大小
1126
+ * @returns Set 的大小
1127
+ */
1128
+ $length(): number;
1129
+
1130
+ /**
1131
+ * 获取 Set 的键值对迭代器
1132
+ * @returns 键值对迭代器
1133
+ */
1134
+ $entries(): IterableIterator<[T, T]>;
1135
+
1136
+ /**
1137
+ * 获取 Set 的键迭代器
1138
+ * @returns 键迭代器
1139
+ */
1140
+ $keys(): IterableIterator<T>;
1141
+
1142
+ /**
1143
+ * 获取 Set 的值迭代器
1144
+ * @returns 值迭代器
1145
+ */
1146
+ $values(): IterableIterator<T>;
1147
+
1148
+ /**
1149
+ * 添加元素, 并返回当前Map
1150
+ * @param value 值
1151
+ * @returns Set 实例
1152
+ */
1153
+ $add(value: T): Set<T>;
1154
+
1155
+ /**
1156
+ * 删除元素, 并返回当前Map
1157
+ * @param value 值
1158
+ * @returns Set 实例
1159
+ */
1160
+ $delete(value: T): Set<T>;
1161
+
1162
+ /**
1163
+ * 添加元素并返回元素数组
1164
+ * @param value 值
1165
+ * @returns 元素数组
1166
+ */
1167
+ $adda(value: T): [T];
1168
+
1169
+ /**
1170
+ * 删除元素并返回元素数组
1171
+ * @param value 值
1172
+ * @returns 元素数组
1173
+ */
1174
+ $deletea(value: T): [T];
1175
+
1176
+ /**
1177
+ * 添加元素并返回元素
1178
+ * @param value 值
1179
+ * @returns 元素
1180
+ */
1181
+ $add0(value: T): T;
1182
+
1183
+ /**
1184
+ * 删除元素并返回元素
1185
+ * @param value 值
1186
+ * @returns 元素
1187
+ */
1188
+ $delete0(value: T): T;
1189
+
1190
+ /**
1191
+ * 计算两个 Set 的并集
1192
+ * @param s 另一个 Set
1193
+ * @returns 并集 Set
1194
+ */
1195
+ $union(s: Set<T>): Set<T>;
1196
+
1197
+ /**
1198
+ * 计算两个 Set 的交集
1199
+ * @param s 另一个 Set
1200
+ * @returns 交集 Set
1201
+ */
1202
+ $intersection(s: Set<T>): Set<T>;
1203
+
1204
+ /**
1205
+ * 计算两个 Set 的差集
1206
+ * @param s 另一个 Set
1207
+ * @returns 差集 Set
1208
+ */
1209
+ $difference(s: Set<T>): Set<T>;
1210
+
1211
+ /**
1212
+ * 计算两个 Set 的对称差集
1213
+ * @param s 另一个 Set
1214
+ * @returns 对称差集 Set
1215
+ */
1216
+ $symmetricDifference(s: Set<T>): Set<T>;
1217
+
1218
+ /**
1219
+ * 转换为数组
1220
+ * @returns 转换后的数组
1221
+ */
1222
+ toArray(): T[];
1223
+
1224
+ /**
1225
+ * 转换为 JSON 格式
1226
+ * @returns 转换后的数组
1227
+ */
1228
+ toJSON(): T[];
1229
+ }
1230
+
1231
+ /**
1232
+ * Date 构造函数扩展
1233
+ */
1234
+ interface DateConstructor {
1235
+ /**
1236
+ * 创建一个新的 Date 实例
1237
+ * @param args 构造参数
1238
+ */
1239
+ new(...args: any[]): Date;
1240
+
1241
+ /**
1242
+ * 格式化当前日期
1243
+ * @param format 格式字符串
1244
+ * @returns 格式化后的字符串
1245
+ */
1246
+ format(format?: string): string;
1247
+
1248
+ /**
1249
+ * 获取当前时间戳
1250
+ * @returns 时间戳
1251
+ */
1252
+ unix(): number;
1253
+
1254
+ /**
1255
+ * 从时间戳创建 Date 实例
1256
+ * @param time 时间戳
1257
+ * @returns Date 实例
1258
+ */
1259
+ fromUnix(time: number): Date;
1260
+
1261
+ /**
1262
+ * 日期计算
1263
+ * @param opts 计算选项
1264
+ * @returns 计算后的 Date 实例
1265
+ */
1266
+ expr(opts: { y?: number; m?: number; d?: number; h?: number; i?: number; s?: number }): Date;
1267
+
1268
+ /**
1269
+ * 获取当天的时间范围
1270
+ * @returns 时间范围数组 [开始时间戳, 结束时间戳]
1271
+ */
1272
+ toDayRange(): [number, number];
1273
+
1274
+ /**
1275
+ * 获取当周的时间范围
1276
+ * @returns 时间范围数组 [开始时间戳, 结束时间戳]
1277
+ */
1278
+ toWeekRange(): [number, number];
1279
+
1280
+ /**
1281
+ * 获取当月的时间范围
1282
+ * @returns 时间范围数组 [开始时间戳, 结束时间戳]
1283
+ */
1284
+ toMonthRange(): [number, number];
1285
+
1286
+ /**
1287
+ * 获取当年的时间范围
1288
+ * @returns 时间范围数组 [开始时间戳, 结束时间戳]
1289
+ */
1290
+ toYearRange(): [number, number];
1291
+ }
1292
+
1293
+ /**
1294
+ * Date 实例扩展
1295
+ */
1296
+ interface Date {
1297
+ /**
1298
+ * 格式化日期
1299
+ * @param format 格式字符串
1300
+ * @returns 格式化后的字符串
1301
+ */
1302
+ format(format?: string): string;
1303
+
1304
+ /**
1305
+ * 获取时间戳
1306
+ * @returns 时间戳
1307
+ */
1308
+ unix(): number;
1309
+
1310
+ /**
1311
+ * 检查是否是闰年
1312
+ * @returns 如果是闰年返回 true,否则返回 false
1313
+ */
1314
+ isLeapYear(): boolean;
1315
+
1316
+ /**
1317
+ * 获取月份中的天数
1318
+ * @returns 月份中的天数
1319
+ */
1320
+ getMonthDay(): number;
1321
+
1322
+ /**
1323
+ * 日期计算
1324
+ * @param opts 计算选项
1325
+ * @returns 计算后的 Date 实例
1326
+ */
1327
+ expr(opts?: { y?: number; m?: number; d?: number; h?: number; i?: number; s?: number }): Date;
1328
+
1329
+ /**
1330
+ * 获取开始时间
1331
+ * @param n 时间单位
1332
+ * @returns 开始时间的 Date 实例
1333
+ */
1334
+ begin(n?: number): Date;
1335
+
1336
+ /**
1337
+ * 获取结束时间
1338
+ * @param n 时间单位
1339
+ * @returns 结束时间的 Date 实例
1340
+ */
1341
+ end(n?: number): Date;
1342
+
1343
+ /**
1344
+ * 获取指定周的日期
1345
+ * @param n 周数
1346
+ * @param dir 方向
1347
+ * @returns 计算后的 Date 实例
1348
+ */
1349
+ week(n?: number, dir?: number): Date;
1350
+
1351
+ /**
1352
+ * 转换为 JSON 格式
1353
+ * @returns 转换后的字符串
1354
+ */
1355
+ toJSON(): string;
1356
+ }
1357
+
1358
+ /**
1359
+ * RegExp 实例扩展
1360
+ */
1361
+ interface RegExp {
1362
+ /**
1363
+ * 转换为 JSON 格式
1364
+ * @returns 转换后的字符串
1365
+ */
1366
+ toJSON(): string;
1367
+ }
1368
+
1369
+ /**
1370
+ * Promise 构造函数扩展
1371
+ */
1372
+ interface PromiseConstructor {
1373
+ /**
1374
+ * 创建一个通道,包含 Promise、resolve 和 reject 函数
1375
+ * @returns 通道数组 [Promise, resolve, reject]
1376
+ */
1377
+ $channel(): [Promise<any>, (value: any) => void, (reason: any) => void];
1378
+
1379
+ /**
1380
+ * 创建一个带有解析器的 Promise
1381
+ * @returns 包含 promise、resolve 和 reject 的对象
1382
+ */
1383
+ $withResolvers(): { promise: Promise<any>; resolve: (value: any) => void; reject: (reason: any) => void; };
1384
+ }
1385
+
1386
+ /**
1387
+ * Promise 实例扩展
1388
+ */
1389
+ interface Promise<T> {
1390
+ /**
1391
+ * 尝试执行并捕获错误
1392
+ * @returns Promise,解析为 [结果, null] 或 [null, 错误]
1393
+ */
1394
+ tryCatch(): Promise<[T, null] | [null, any]>;
1395
+ }
1396
+
1397
+ /**
1398
+ * JSON 扩展
1399
+ */
1400
+ interface JSON {
1401
+ /**
1402
+ * 解析 JSON 字符串
1403
+ * @param v 要解析的值
1404
+ * @param defval 默认值
1405
+ * @returns 解析后的对象或默认值
1406
+ */
1407
+ $parse(v: any, defval?: any): any;
1408
+ }
1409
+
1410
+ /**
1411
+ * Iterator 扩展
1412
+ */
1413
+ interface Iterator<T> {
1414
+ /**
1415
+ * 转换为数组
1416
+ * @returns 转换后的数组
1417
+ */
1418
+ toArray(): T[];
1419
+ }
1420
+
1421
+ /**
1422
+ * ArrayBuffer 扩展
1423
+ */
1424
+ interface ArrayBuffer {
1425
+ /**
1426
+ * 转换为 Uint8Array
1427
+ * @returns 转换后的 Uint8Array
1428
+ */
1429
+ toUint8Array(): Uint8Array;
1430
+ }
1431
+
1432
+ /**
1433
+ * Uint8Array 构造函数扩展
1434
+ */
1435
+ interface Uint8ArrayConstructor {
1436
+ /**
1437
+ * 创建一个新的 Uint8Array 实例
1438
+ */
1439
+ new(): Uint8Array;
1440
+
1441
+ /**
1442
+ * 通过长度创建一个新的 Uint8Array 实例
1443
+ * @param length 长度
1444
+ */
1445
+ new(length: number): Uint8Array;
1446
+
1447
+ /**
1448
+ * 从字符串创建 Uint8Array
1449
+ * @param str 字符串
1450
+ * @returns 创建的 Uint8Array
1451
+ */
1452
+ fromString(str: string): Uint8Array;
1453
+
1454
+ /**
1455
+ * 从十六进制字符串创建 Uint8Array
1456
+ * @param str 十六进制字符串
1457
+ * @returns 创建的 Uint8Array
1458
+ */
1459
+ $fromHex(str: string): Uint8Array;
1460
+
1461
+ /**
1462
+ * 从 Base64 字符串创建 Uint8Array
1463
+ * @param str Base64 字符串
1464
+ * @returns 创建的 Uint8Array
1465
+ */
1466
+ $fromBase64(str: string): Uint8Array;
1467
+ }
1468
+
1469
+ /**
1470
+ * Uint8Array 实例扩展
1471
+ */
1472
+ interface Uint8Array {
1473
+ /**
1474
+ * 从字符串设置值
1475
+ * @param str 字符串
1476
+ * @param targetOffset 目标偏移量
1477
+ * @returns 设置后的对象
1478
+ */
1479
+ setFromString(str: string, targetOffset?: number): Object;
1480
+
1481
+ /**
1482
+ * 从十六进制字符串设置值
1483
+ * @param str 十六进制字符串
1484
+ * @param targetOffset 目标偏移量
1485
+ * @returns 设置后的对象
1486
+ */
1487
+ $setFromHex(str: string, targetOffset?: number): Object;
1488
+
1489
+ /**
1490
+ * 从 Base64 字符串设置值
1491
+ * @param str Base64 字符串
1492
+ * @param targetOffset 目标偏移量
1493
+ * @returns 设置后的对象
1494
+ */
1495
+ $setFromBase64(str: string, targetOffset?: number): Object;
1496
+
1497
+ /**
1498
+ * 转换为字符串
1499
+ * @returns 转换后的字符串
1500
+ */
1501
+ toString(): string;
1502
+
1503
+ /**
1504
+ * 转换为十六进制字符串
1505
+ * @returns 十六进制字符串
1506
+ */
1507
+ $toHex(): string;
1508
+
1509
+ /**
1510
+ * 转换为 Base64 字符串
1511
+ * @returns Base64 字符串
1512
+ */
1513
+ $toBase64(): string;
1514
+
1515
+ /**
1516
+ * 转换为数组
1517
+ * @returns 转换后的数组
1518
+ */
1519
+ toArray(): number[];
1520
+ }
1521
+
1522
+ /**
1523
+ * Math 扩展
1524
+ */
1525
+ interface Math {
1526
+ /**
1527
+ * 生成随机字符串
1528
+ * @param len 长度
1529
+ * @param slen 特殊字符长度
1530
+ * @param chars 字符集
1531
+ * @param schars 特殊字符集
1532
+ * @returns 随机字符串
1533
+ */
1534
+ randstr(len?: number, slen?: number, chars?: string, schars?: string): string;
1535
+
1536
+ /**
1537
+ * 生成随机整数
1538
+ * @param min 最小值
1539
+ * @param max 最大值
1540
+ * @returns 随机整数
1541
+ */
1542
+ randint(min?: number, max?: number): number;
1543
+
1544
+ /**
1545
+ * 生成递增 ID
1546
+ * @returns 递增 ID
1547
+ */
1548
+ incrid(): number;
1549
+
1550
+ /**
1551
+ * 生成递增字符串
1552
+ * @returns 递增字符串
1553
+ */
1554
+ incrstr(): string;
1555
+
1556
+ /**
1557
+ * 生成唯一 ID
1558
+ * @param now 时间戳
1559
+ * @returns 唯一 ID
1560
+ */
1561
+ uniqid(now?: number): number;
1562
+
1563
+ /**
1564
+ * 生成唯一字符串
1565
+ * @returns 唯一字符串
1566
+ */
1567
+ uniqstr(): string;
1568
+
1569
+ /**
1570
+ * 睡眠指定时间
1571
+ * @param duration 持续时间(毫秒)
1572
+ * @returns Promise
1573
+ */
1574
+ sleep(duration: number): Promise<void>;
1575
+
1576
+ /**
1577
+ * 使用模板
1578
+ * @param name 模板名称
1579
+ * @returns 模板内容
1580
+ */
1581
+ useTemplate(name: string): any;
1582
+ }
1583
+
1584
+ /**
1585
+ * LRU 缓存类
1586
+ */
1587
+ class LRU<K, V> extends Map<K, V> {
1588
+ /**
1589
+ * 构造函数
1590
+ * @param capacity 容量
1591
+ */
1592
+ constructor(capacity: number);
1593
+
1594
+ /**
1595
+ * 获取值
1596
+ * @param key 键
1597
+ * @returns 值或 undefined
1598
+ */
1599
+ get(key: K): V | undefined;
1600
+
1601
+ /**
1602
+ * 获取值,如果不存在则插入默认值
1603
+ * @param key 键
1604
+ * @param defval 默认值
1605
+ * @returns 值
1606
+ */
1607
+ getOrInsert(key: K, defval: V): V;
1608
+
1609
+ /**
1610
+ * 获取值,如果不存在则计算并插入
1611
+ * @param key 键
1612
+ * @param callback 计算函数
1613
+ * @returns 值
1614
+ */
1615
+ getOrInsertComputed(key: K, callback: (key: K) => V): V;
1616
+
1617
+ /**
1618
+ * 异步获取值,如果不存在则计算并插入
1619
+ * @param key 键
1620
+ * @param callback 异步计算函数
1621
+ * @returns Promise,解析为值
1622
+ */
1623
+ getOrInsertComputedAsync(key: K, callback: (key: K) => Promise<V>): Promise<V>;
1624
+
1625
+ /**
1626
+ * 设置键值对
1627
+ * @param key 键
1628
+ * @param value 值
1629
+ * @returns LRU 实例
1630
+ */
1631
+ set(key: K, value: V): this;
1632
+
1633
+ /**
1634
+ * 设置键值对(别名)
1635
+ * @param key 键
1636
+ * @param value 值
1637
+ * @returns LRU 实例
1638
+ */
1639
+ put(key: K, value: V): this;
1640
+ }
1641
+
1642
+ /**
1643
+ * LRU 构造函数接口
1644
+ */
1645
+ interface LRUConstructor {
1646
+ /**
1647
+ * 创建一个新的 LRU 实例
1648
+ * @param capacity 容量
1649
+ */
1650
+ new <K, V>(capacity: number): LRU<K, V>;
1651
+ }
1652
+ }
1653
+
1654
+ export {}