@lsby/ts-type-func 0.0.1

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.
@@ -0,0 +1,138 @@
1
+ declare type UnionToIntersection<T> = (T extends any ? (x: T) => any : never) extends (x: infer U) => any ? U : never;
2
+ declare type LastUnion<T> = UnionToIntersection<T extends any ? (x: T) => any : never> extends (x: infer L) => any ? L : never;
3
+ declare type 联合转元组<T, Last = LastUnion<T>> = [T] extends [never] ? [] : [...联合转元组<Exclude<T, Last>>, Last];
4
+
5
+ declare type 对象转json<键们, 对象> = 键们 extends [] ? '' : 键们 extends [infer a] ? a extends string ? a extends keyof 对象 ? `"${a}":${实例转json<对象[a]>}` : never : never : 键们 extends [infer a, ...infer as] ? a extends string ? a extends keyof 对象 ? `"${a}":${实例转json<对象[a]>},${对象转json<as, 对象>}` : never : never : never;
6
+ declare type 数组转json<值们> = 值们 extends [] ? '' : 值们 extends [infer a] ? `${实例转json<a>}` : 值们 extends [infer a, ...infer as] ? `${实例转json<a>},${数组转json<as>}` : never;
7
+ declare type 实例转json<实例> = 实例 extends object ? 实例 extends Array<unknown> ? `[${数组转json<实例>}]` : 联合转元组<keyof 实例> extends infer 键们 ? `{${对象转json<键们, 实例>}}` : never : 实例 extends string ? `"${实例}"` : 实例 extends number ? `"${实例}"` : never;
8
+ declare type 生成json<a> = 实例转json<a>;
9
+
10
+ declare type ParserError<T extends string> = {
11
+ error: true;
12
+ } & T;
13
+ declare type EatWhitespace<State extends string> = string extends State ? ParserError<'EatWhitespace got generic string type'> : State extends ` ${infer State}` | `\n${infer State}` ? EatWhitespace<State> : State;
14
+ declare type AddKeyValue<Memo extends Record<string, any>, Key extends string, Value extends any> = Memo & {
15
+ [K in Key]: Value;
16
+ };
17
+ declare type ParseJsonObject<State extends string, Memo extends Record<string, any> = {}> = string extends State ? ParserError<'ParseJsonObject got generic string type'> : EatWhitespace<State> extends `}${infer State}` ? [Memo, State] : EatWhitespace<State> extends `"${infer Key}"${infer State}` ? EatWhitespace<State> extends `:${infer State}` ? ParseJsonValue<State> extends [infer Value, `${infer State}`] ? EatWhitespace<State> extends `,${infer State}` ? ParseJsonObject<State, AddKeyValue<Memo, Key, Value>> : EatWhitespace<State> extends `}${infer State}` ? [AddKeyValue<Memo, Key, Value>, State] : ParserError<`ParseJsonObject received unexpected token: ${State}`> : ParserError<`ParseJsonValue returned unexpected value for: ${State}`> : ParserError<`ParseJsonObject received unexpected token: ${State}`> : ParserError<`ParseJsonObject received unexpected token: ${State}`>;
18
+ declare type ParseJsonArray<State extends string, Memo extends any[] = []> = string extends State ? ParserError<'ParseJsonArray got generic string type'> : EatWhitespace<State> extends `]${infer State}` ? [Memo, State] : ParseJsonValue<State> extends [infer Value, `${infer State}`] ? EatWhitespace<State> extends `,${infer State}` ? ParseJsonArray<EatWhitespace<State>, [...Memo, Value]> : EatWhitespace<State> extends `]${infer State}` ? [[...Memo, Value], State] : ParserError<`ParseJsonArray received unexpected token: ${State}`> : ParserError<`ParseJsonValue returned unexpected value for: ${State}`>;
19
+ declare type ParseJsonValue<State extends string> = string extends State ? ParserError<'ParseJsonValue got generic string type'> : EatWhitespace<State> extends `null${infer State}` ? [null, State] : EatWhitespace<State> extends `true${infer State}` ? [true, State] : EatWhitespace<State> extends `false${infer State}` ? [false, State] : EatWhitespace<State> extends `"${infer Value}"${infer State}` ? [Value, State] : EatWhitespace<State> extends `[${infer State}` ? ParseJsonArray<State> : EatWhitespace<State> extends `{${infer State}` ? ParseJsonObject<State> : ParserError<`ParseJsonValue received unexpected token: ${State}`>;
20
+ declare type 解析json<T extends string> = ParseJsonValue<T> extends infer Result ? Result extends [infer Value, string] ? Value : Result extends ParserError<any> ? Result : ParserError<'ParseJsonValue returned unexpected Result'> : ParserError<'ParseJsonValue returned uninferrable Result'>;
21
+
22
+ declare type 函数参数处理<x> = x extends [infer a] ? a : never;
23
+ declare type 函数参数们处理<arr extends any[]> = arr extends [] ? [] : arr extends [infer a] ? [函数参数处理<[a]>] : arr extends [infer a, ...infer as] ? [函数参数处理<[a]>, ...函数参数们处理<as>] : never;
24
+ declare type 计算函数类型<f> = f extends (...args: any) => any ? [函数参数们处理<Parameters<f>>, ReturnType<f>] : never;
25
+
26
+ declare type 反转字符串<剩余字符串> = 剩余字符串 extends '' ? '' : 剩余字符串 extends `${infer a}${infer as}` ? `${反转字符串<as>}${a}` : never;
27
+
28
+ declare type 字符串以某值开头<s extends string, A> = A extends `${s}${infer a}` ? true : false;
29
+
30
+ declare type 删除对象指定键<obj, 删除键 extends string> = Omit<obj, 删除键>;
31
+
32
+ declare type 取对象值们<obj, 剩余的键 extends any[] = 联合转元组<keyof obj>> = 剩余的键 extends [] ? [] : 剩余的键 extends [infer a, ...infer as] ? a extends keyof obj ? [obj[a], ...取对象值们<obj, as>] : never : never;
33
+
34
+ declare type 取对象键们<obj> = 联合转元组<keyof obj> extends infer r ? (r extends string[] ? r : never) : never;
35
+
36
+ declare type 取对象第一个键值<obj> = 取对象键们<obj> extends infer keys ? keys extends [] ? never : keys extends [infer a, ...infer as] ? a extends keyof obj ? [a, obj[a]] : never : never : never;
37
+
38
+ declare type 取对象键值们<obj, 剩余的键 extends any[] = 联合转元组<keyof obj>> = 剩余的键 extends [] ? [] : 剩余的键 extends [infer a, ...infer as] ? a extends keyof obj ? [[a, obj[a]], ...取对象键值们<obj, as>] : never : never;
39
+
40
+ declare type 取对象长度<obj> = obj extends Record<string, unknown> ? 取对象键们<obj>['length'] extends infer n ? n extends number ? n : never : never : never;
41
+
42
+ declare type 与<a1, a2> = a1 extends true ? (a2 extends true ? true : false) : false;
43
+
44
+ declare type 是基础类型<a> = a extends string ? true : a extends number ? true : a extends boolean ? true : false;
45
+
46
+ declare type 基础类型等于<a1, a2> = 与<是基础类型<a1>, 是基础类型<a2>> extends true ? a1 extends a2 ? a2 extends a1 ? true : false : false : false;
47
+
48
+ declare type 替换对象键<obj extends Record<string, unknown>, 原键 extends string, 新键 extends string, 剩余的键 extends string[] = 取对象键们<obj>> = 剩余的键 extends [] ? {} : 剩余的键 extends [infer a, ...infer as] ? as extends string[] ? 基础类型等于<a, 原键> extends true ? Record<新键, obj[原键]> & 替换对象键<obj, 原键, 新键, as> : a extends keyof obj ? Record<a, obj[a]> & 替换对象键<obj, 原键, 新键, as> : never : never : never;
49
+
50
+ declare type N1 = [any];
51
+ declare type N2 = [any, any];
52
+ declare type N3 = [any, any, any];
53
+ declare type N4 = [any, any, any, any];
54
+ declare type N5 = [any, any, any, any, any];
55
+ declare type N6 = [any, any, any, any, any, any];
56
+ declare type N7 = [any, any, any, any, any, any, any];
57
+ declare type N8 = [any, any, any, any, any, any, any, any];
58
+ declare type N9 = [any, any, any, any, any, any, any, any, any];
59
+ declare type NumToTuple<N, L = N extends string | number ? `${N}` : ''> = L extends `${N1['length']}` ? N1 : L extends `${N2['length']}` ? N2 : L extends `${N3['length']}` ? N3 : L extends `${N4['length']}` ? N4 : L extends `${N5['length']}` ? N5 : L extends `${N6['length']}` ? N6 : L extends `${N7['length']}` ? N7 : L extends `${N8['length']}` ? N8 : L extends `${N9['length']}` ? N9 : [];
60
+ declare type ToTuple<T extends bigint | string | number, S = `${T}`> = S extends `${infer F}${infer O}` ? [F, ...ToTuple<O>] : [];
61
+ declare type TuplePop<T extends any[]> = T extends [...any, infer O] ? O : '';
62
+ declare type TupleTail<T extends any[]> = T extends [...infer F, any] ? F : T;
63
+ declare type TensDigitSum<A, B, C = 0, R = [...NumToTuple<A>, ...NumToTuple<B>, ...NumToTuple<C>]['length']> = R extends number ? R : 0;
64
+ declare type SumToCarry<A, B, C, R extends string[] = ToTuple<TensDigitSum<A, B, C>>> = R extends [infer F, infer O] ? [F, O] : ['', R[0]];
65
+ declare type TupleToString<T extends any[]> = T extends [string, ...infer O] ? `${T[0]}${TupleToString<O>}` : '';
66
+ declare type TupleSum<A extends any[], B extends any[], R extends any[] = [], C extends any = ''> = A extends [] ? C extends '' ? TupleToString<[...B, ...R]> : TupleSum<B, [C], R> : B extends [] ? C extends '' ? TupleToString<[...A, ...R]> : TupleSum<A, [C], R> : SumToCarry<TuplePop<A>, TuplePop<B>, C> extends [infer C1, infer T] ? TupleSum<TupleTail<A>, TupleTail<B>, [T, ...R], C1> : TupleToString<R>;
67
+ declare type 求和<A extends string | number | bigint, B extends string | number | bigint> = TupleSum<ToTuple<A>, ToTuple<B>, [
68
+ ]>;
69
+
70
+ declare type 后继数<a extends string | number> = 求和<a, 1>;
71
+
72
+ declare type 数组反转<Arr> = Arr extends [] ? [] : Arr extends [infer a, ...infer as] ? [...数组反转<as>, a] : never;
73
+
74
+ declare type 删除数组最后一个<Arr> = 数组反转<Arr> extends [infer a, ...infer as] ? 数组反转<as> : never;
75
+
76
+ declare type 删除数组第一个<Arr> = Arr extends [infer a, ...infer as] ? as : never;
77
+
78
+ declare type 判定双层数组<arr> = arr extends [infer a] ? (a extends any[] ? true : false) : false;
79
+
80
+ declare type 包装非数组<a> = a extends any[] ? a : [a];
81
+
82
+ declare type 去除单层数组<Arr> = Arr extends [infer a] ? a : Arr;
83
+
84
+ declare type 取数组最后一个<Arr> = 数组反转<Arr> extends [infer a, ...infer as] ? a : never;
85
+
86
+ declare type 取数组第一个<Arr> = Arr extends [infer a, ...infer as] ? a : never;
87
+
88
+ declare type 等于<a1, a2> = a1 extends a2 ? (a2 extends a1 ? true : false) : false;
89
+
90
+ declare type 数组存在元素<数组, 值> = 数组 extends [] ? false : 数组 extends [infer a, ...infer as] ? 等于<a, 值> extends true ? true : 数组存在元素<as, 值> : never;
91
+
92
+ declare type 数组过滤<arr, 内容> = arr extends [] ? [] : arr extends [infer a, ...infer as] ? 等于<a, 内容> extends true ? 数组过滤<as, 内容> : [a, ...数组过滤<as, 内容>] : never;
93
+
94
+ declare type 数组长度判定<arr, n> = arr extends any[] ? (arr['length'] extends n ? true : false) : never;
95
+
96
+ declare type 替换数组字符串<数组, 旧值, 新值> = 数组 extends [] ? [] : 数组 extends [infer a, ...infer as] ? a extends 旧值 ? [新值, ...替换数组字符串<as, 旧值, 新值>] : [a, ...替换数组字符串<as, 旧值, 新值>] : never;
97
+
98
+ declare type 是never<T> = [T] extends [never] ? true : false;
99
+
100
+ declare type 是unknown<T> = unknown extends T ? true : false;
101
+
102
+ declare type 元组转联合<T> = T extends any[] ? T[number] : never;
103
+
104
+ declare type NumberMap = {
105
+ '0': [];
106
+ '1': [1];
107
+ '2': [1, 1];
108
+ '3': [1, 1, 1];
109
+ '4': [1, 1, 1, 1];
110
+ '5': [1, 1, 1, 1, 1];
111
+ '6': [1, 1, 1, 1, 1, 1];
112
+ '7': [1, 1, 1, 1, 1, 1, 1];
113
+ '8': [1, 1, 1, 1, 1, 1, 1, 1];
114
+ '9': [1, 1, 1, 1, 1, 1, 1, 1, 1];
115
+ };
116
+ declare type NumberKeys = keyof NumberMap;
117
+ declare type Multiply10<T extends ReadonlyArray<any> = []> = [...T, ...T, ...T, ...T, ...T, ...T, ...T, ...T, ...T, ...T];
118
+ declare type 字符串转数字<T extends string, A extends any[] = []> = T extends `${infer L}${infer T}` ? L extends NumberKeys ? 字符串转数字<T, [...Multiply10<A>, ...NumberMap[L]]> : never : A['length'];
119
+
120
+ declare type 数字转字符串<n> = n extends number ? `${n}` : never;
121
+
122
+ declare const __ERROR__: unique symbol;
123
+ interface 错误<msg extends string | any[] = ''> {
124
+ [__ERROR__]: true;
125
+ msg: msg;
126
+ }
127
+
128
+ declare type 是错误<值> = 值 extends 错误<infer msg> ? true : false;
129
+
130
+ declare type 检查<条件组 extends any[], 正确值> = 条件组 extends [] ? 正确值 : 条件组 extends [infer a, ...infer as] ? a extends true ? 检查<as, 正确值> : a : 错误<['检查:', '解构失败', 条件组]>;
131
+
132
+ declare type 计算条件<条件或错误, 返回值> = 条件或错误 extends infer r ? r extends true ? 返回值 : r : 错误<'计算约束失败'>;
133
+
134
+ declare type 或<a1, a2> = a1 extends true ? true : a2 extends true ? true : false;
135
+
136
+ declare type 非<a> = a extends true ? false : true;
137
+
138
+ export { 与, 元组转联合, 删除对象指定键, 删除数组最后一个, 删除数组第一个, 判定双层数组, 包装非数组, 去除单层数组, 反转字符串, 取对象值们, 取对象第一个键值, 取对象键们, 取对象键值们, 取对象长度, 取数组最后一个, 取数组第一个, 后继数, 基础类型等于, 字符串以某值开头, 字符串转数字, 或, 数字转字符串, 数组反转, 数组存在元素, 数组过滤, 数组长度判定, 是never, 是unknown, 是基础类型, 是错误, 替换对象键, 替换数组字符串, 检查, 求和, 生成json, 等于, 联合转元组, 解析json, 计算函数类型, 计算条件, 错误, 非 };
@@ -0,0 +1,21 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __copyProps = (to, from, except, desc) => {
7
+ if (from && typeof from === "object" || typeof from === "function") {
8
+ for (let key of __getOwnPropNames(from))
9
+ if (!__hasOwnProp.call(to, key) && key !== except)
10
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
11
+ }
12
+ return to;
13
+ };
14
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
15
+
16
+ // src/index.ts
17
+ var src_exports = {};
18
+ module.exports = __toCommonJS(src_exports);
19
+
20
+ // src/通用/错误.ts
21
+ var __ERROR__ = Symbol();
@@ -0,0 +1,138 @@
1
+ declare type UnionToIntersection<T> = (T extends any ? (x: T) => any : never) extends (x: infer U) => any ? U : never;
2
+ declare type LastUnion<T> = UnionToIntersection<T extends any ? (x: T) => any : never> extends (x: infer L) => any ? L : never;
3
+ declare type 联合转元组<T, Last = LastUnion<T>> = [T] extends [never] ? [] : [...联合转元组<Exclude<T, Last>>, Last];
4
+
5
+ declare type 对象转json<键们, 对象> = 键们 extends [] ? '' : 键们 extends [infer a] ? a extends string ? a extends keyof 对象 ? `"${a}":${实例转json<对象[a]>}` : never : never : 键们 extends [infer a, ...infer as] ? a extends string ? a extends keyof 对象 ? `"${a}":${实例转json<对象[a]>},${对象转json<as, 对象>}` : never : never : never;
6
+ declare type 数组转json<值们> = 值们 extends [] ? '' : 值们 extends [infer a] ? `${实例转json<a>}` : 值们 extends [infer a, ...infer as] ? `${实例转json<a>},${数组转json<as>}` : never;
7
+ declare type 实例转json<实例> = 实例 extends object ? 实例 extends Array<unknown> ? `[${数组转json<实例>}]` : 联合转元组<keyof 实例> extends infer 键们 ? `{${对象转json<键们, 实例>}}` : never : 实例 extends string ? `"${实例}"` : 实例 extends number ? `"${实例}"` : never;
8
+ declare type 生成json<a> = 实例转json<a>;
9
+
10
+ declare type ParserError<T extends string> = {
11
+ error: true;
12
+ } & T;
13
+ declare type EatWhitespace<State extends string> = string extends State ? ParserError<'EatWhitespace got generic string type'> : State extends ` ${infer State}` | `\n${infer State}` ? EatWhitespace<State> : State;
14
+ declare type AddKeyValue<Memo extends Record<string, any>, Key extends string, Value extends any> = Memo & {
15
+ [K in Key]: Value;
16
+ };
17
+ declare type ParseJsonObject<State extends string, Memo extends Record<string, any> = {}> = string extends State ? ParserError<'ParseJsonObject got generic string type'> : EatWhitespace<State> extends `}${infer State}` ? [Memo, State] : EatWhitespace<State> extends `"${infer Key}"${infer State}` ? EatWhitespace<State> extends `:${infer State}` ? ParseJsonValue<State> extends [infer Value, `${infer State}`] ? EatWhitespace<State> extends `,${infer State}` ? ParseJsonObject<State, AddKeyValue<Memo, Key, Value>> : EatWhitespace<State> extends `}${infer State}` ? [AddKeyValue<Memo, Key, Value>, State] : ParserError<`ParseJsonObject received unexpected token: ${State}`> : ParserError<`ParseJsonValue returned unexpected value for: ${State}`> : ParserError<`ParseJsonObject received unexpected token: ${State}`> : ParserError<`ParseJsonObject received unexpected token: ${State}`>;
18
+ declare type ParseJsonArray<State extends string, Memo extends any[] = []> = string extends State ? ParserError<'ParseJsonArray got generic string type'> : EatWhitespace<State> extends `]${infer State}` ? [Memo, State] : ParseJsonValue<State> extends [infer Value, `${infer State}`] ? EatWhitespace<State> extends `,${infer State}` ? ParseJsonArray<EatWhitespace<State>, [...Memo, Value]> : EatWhitespace<State> extends `]${infer State}` ? [[...Memo, Value], State] : ParserError<`ParseJsonArray received unexpected token: ${State}`> : ParserError<`ParseJsonValue returned unexpected value for: ${State}`>;
19
+ declare type ParseJsonValue<State extends string> = string extends State ? ParserError<'ParseJsonValue got generic string type'> : EatWhitespace<State> extends `null${infer State}` ? [null, State] : EatWhitespace<State> extends `true${infer State}` ? [true, State] : EatWhitespace<State> extends `false${infer State}` ? [false, State] : EatWhitespace<State> extends `"${infer Value}"${infer State}` ? [Value, State] : EatWhitespace<State> extends `[${infer State}` ? ParseJsonArray<State> : EatWhitespace<State> extends `{${infer State}` ? ParseJsonObject<State> : ParserError<`ParseJsonValue received unexpected token: ${State}`>;
20
+ declare type 解析json<T extends string> = ParseJsonValue<T> extends infer Result ? Result extends [infer Value, string] ? Value : Result extends ParserError<any> ? Result : ParserError<'ParseJsonValue returned unexpected Result'> : ParserError<'ParseJsonValue returned uninferrable Result'>;
21
+
22
+ declare type 函数参数处理<x> = x extends [infer a] ? a : never;
23
+ declare type 函数参数们处理<arr extends any[]> = arr extends [] ? [] : arr extends [infer a] ? [函数参数处理<[a]>] : arr extends [infer a, ...infer as] ? [函数参数处理<[a]>, ...函数参数们处理<as>] : never;
24
+ declare type 计算函数类型<f> = f extends (...args: any) => any ? [函数参数们处理<Parameters<f>>, ReturnType<f>] : never;
25
+
26
+ declare type 反转字符串<剩余字符串> = 剩余字符串 extends '' ? '' : 剩余字符串 extends `${infer a}${infer as}` ? `${反转字符串<as>}${a}` : never;
27
+
28
+ declare type 字符串以某值开头<s extends string, A> = A extends `${s}${infer a}` ? true : false;
29
+
30
+ declare type 删除对象指定键<obj, 删除键 extends string> = Omit<obj, 删除键>;
31
+
32
+ declare type 取对象值们<obj, 剩余的键 extends any[] = 联合转元组<keyof obj>> = 剩余的键 extends [] ? [] : 剩余的键 extends [infer a, ...infer as] ? a extends keyof obj ? [obj[a], ...取对象值们<obj, as>] : never : never;
33
+
34
+ declare type 取对象键们<obj> = 联合转元组<keyof obj> extends infer r ? (r extends string[] ? r : never) : never;
35
+
36
+ declare type 取对象第一个键值<obj> = 取对象键们<obj> extends infer keys ? keys extends [] ? never : keys extends [infer a, ...infer as] ? a extends keyof obj ? [a, obj[a]] : never : never : never;
37
+
38
+ declare type 取对象键值们<obj, 剩余的键 extends any[] = 联合转元组<keyof obj>> = 剩余的键 extends [] ? [] : 剩余的键 extends [infer a, ...infer as] ? a extends keyof obj ? [[a, obj[a]], ...取对象键值们<obj, as>] : never : never;
39
+
40
+ declare type 取对象长度<obj> = obj extends Record<string, unknown> ? 取对象键们<obj>['length'] extends infer n ? n extends number ? n : never : never : never;
41
+
42
+ declare type 与<a1, a2> = a1 extends true ? (a2 extends true ? true : false) : false;
43
+
44
+ declare type 是基础类型<a> = a extends string ? true : a extends number ? true : a extends boolean ? true : false;
45
+
46
+ declare type 基础类型等于<a1, a2> = 与<是基础类型<a1>, 是基础类型<a2>> extends true ? a1 extends a2 ? a2 extends a1 ? true : false : false : false;
47
+
48
+ declare type 替换对象键<obj extends Record<string, unknown>, 原键 extends string, 新键 extends string, 剩余的键 extends string[] = 取对象键们<obj>> = 剩余的键 extends [] ? {} : 剩余的键 extends [infer a, ...infer as] ? as extends string[] ? 基础类型等于<a, 原键> extends true ? Record<新键, obj[原键]> & 替换对象键<obj, 原键, 新键, as> : a extends keyof obj ? Record<a, obj[a]> & 替换对象键<obj, 原键, 新键, as> : never : never : never;
49
+
50
+ declare type N1 = [any];
51
+ declare type N2 = [any, any];
52
+ declare type N3 = [any, any, any];
53
+ declare type N4 = [any, any, any, any];
54
+ declare type N5 = [any, any, any, any, any];
55
+ declare type N6 = [any, any, any, any, any, any];
56
+ declare type N7 = [any, any, any, any, any, any, any];
57
+ declare type N8 = [any, any, any, any, any, any, any, any];
58
+ declare type N9 = [any, any, any, any, any, any, any, any, any];
59
+ declare type NumToTuple<N, L = N extends string | number ? `${N}` : ''> = L extends `${N1['length']}` ? N1 : L extends `${N2['length']}` ? N2 : L extends `${N3['length']}` ? N3 : L extends `${N4['length']}` ? N4 : L extends `${N5['length']}` ? N5 : L extends `${N6['length']}` ? N6 : L extends `${N7['length']}` ? N7 : L extends `${N8['length']}` ? N8 : L extends `${N9['length']}` ? N9 : [];
60
+ declare type ToTuple<T extends bigint | string | number, S = `${T}`> = S extends `${infer F}${infer O}` ? [F, ...ToTuple<O>] : [];
61
+ declare type TuplePop<T extends any[]> = T extends [...any, infer O] ? O : '';
62
+ declare type TupleTail<T extends any[]> = T extends [...infer F, any] ? F : T;
63
+ declare type TensDigitSum<A, B, C = 0, R = [...NumToTuple<A>, ...NumToTuple<B>, ...NumToTuple<C>]['length']> = R extends number ? R : 0;
64
+ declare type SumToCarry<A, B, C, R extends string[] = ToTuple<TensDigitSum<A, B, C>>> = R extends [infer F, infer O] ? [F, O] : ['', R[0]];
65
+ declare type TupleToString<T extends any[]> = T extends [string, ...infer O] ? `${T[0]}${TupleToString<O>}` : '';
66
+ declare type TupleSum<A extends any[], B extends any[], R extends any[] = [], C extends any = ''> = A extends [] ? C extends '' ? TupleToString<[...B, ...R]> : TupleSum<B, [C], R> : B extends [] ? C extends '' ? TupleToString<[...A, ...R]> : TupleSum<A, [C], R> : SumToCarry<TuplePop<A>, TuplePop<B>, C> extends [infer C1, infer T] ? TupleSum<TupleTail<A>, TupleTail<B>, [T, ...R], C1> : TupleToString<R>;
67
+ declare type 求和<A extends string | number | bigint, B extends string | number | bigint> = TupleSum<ToTuple<A>, ToTuple<B>, [
68
+ ]>;
69
+
70
+ declare type 后继数<a extends string | number> = 求和<a, 1>;
71
+
72
+ declare type 数组反转<Arr> = Arr extends [] ? [] : Arr extends [infer a, ...infer as] ? [...数组反转<as>, a] : never;
73
+
74
+ declare type 删除数组最后一个<Arr> = 数组反转<Arr> extends [infer a, ...infer as] ? 数组反转<as> : never;
75
+
76
+ declare type 删除数组第一个<Arr> = Arr extends [infer a, ...infer as] ? as : never;
77
+
78
+ declare type 判定双层数组<arr> = arr extends [infer a] ? (a extends any[] ? true : false) : false;
79
+
80
+ declare type 包装非数组<a> = a extends any[] ? a : [a];
81
+
82
+ declare type 去除单层数组<Arr> = Arr extends [infer a] ? a : Arr;
83
+
84
+ declare type 取数组最后一个<Arr> = 数组反转<Arr> extends [infer a, ...infer as] ? a : never;
85
+
86
+ declare type 取数组第一个<Arr> = Arr extends [infer a, ...infer as] ? a : never;
87
+
88
+ declare type 等于<a1, a2> = a1 extends a2 ? (a2 extends a1 ? true : false) : false;
89
+
90
+ declare type 数组存在元素<数组, 值> = 数组 extends [] ? false : 数组 extends [infer a, ...infer as] ? 等于<a, 值> extends true ? true : 数组存在元素<as, 值> : never;
91
+
92
+ declare type 数组过滤<arr, 内容> = arr extends [] ? [] : arr extends [infer a, ...infer as] ? 等于<a, 内容> extends true ? 数组过滤<as, 内容> : [a, ...数组过滤<as, 内容>] : never;
93
+
94
+ declare type 数组长度判定<arr, n> = arr extends any[] ? (arr['length'] extends n ? true : false) : never;
95
+
96
+ declare type 替换数组字符串<数组, 旧值, 新值> = 数组 extends [] ? [] : 数组 extends [infer a, ...infer as] ? a extends 旧值 ? [新值, ...替换数组字符串<as, 旧值, 新值>] : [a, ...替换数组字符串<as, 旧值, 新值>] : never;
97
+
98
+ declare type 是never<T> = [T] extends [never] ? true : false;
99
+
100
+ declare type 是unknown<T> = unknown extends T ? true : false;
101
+
102
+ declare type 元组转联合<T> = T extends any[] ? T[number] : never;
103
+
104
+ declare type NumberMap = {
105
+ '0': [];
106
+ '1': [1];
107
+ '2': [1, 1];
108
+ '3': [1, 1, 1];
109
+ '4': [1, 1, 1, 1];
110
+ '5': [1, 1, 1, 1, 1];
111
+ '6': [1, 1, 1, 1, 1, 1];
112
+ '7': [1, 1, 1, 1, 1, 1, 1];
113
+ '8': [1, 1, 1, 1, 1, 1, 1, 1];
114
+ '9': [1, 1, 1, 1, 1, 1, 1, 1, 1];
115
+ };
116
+ declare type NumberKeys = keyof NumberMap;
117
+ declare type Multiply10<T extends ReadonlyArray<any> = []> = [...T, ...T, ...T, ...T, ...T, ...T, ...T, ...T, ...T, ...T];
118
+ declare type 字符串转数字<T extends string, A extends any[] = []> = T extends `${infer L}${infer T}` ? L extends NumberKeys ? 字符串转数字<T, [...Multiply10<A>, ...NumberMap[L]]> : never : A['length'];
119
+
120
+ declare type 数字转字符串<n> = n extends number ? `${n}` : never;
121
+
122
+ declare const __ERROR__: unique symbol;
123
+ interface 错误<msg extends string | any[] = ''> {
124
+ [__ERROR__]: true;
125
+ msg: msg;
126
+ }
127
+
128
+ declare type 是错误<值> = 值 extends 错误<infer msg> ? true : false;
129
+
130
+ declare type 检查<条件组 extends any[], 正确值> = 条件组 extends [] ? 正确值 : 条件组 extends [infer a, ...infer as] ? a extends true ? 检查<as, 正确值> : a : 错误<['检查:', '解构失败', 条件组]>;
131
+
132
+ declare type 计算条件<条件或错误, 返回值> = 条件或错误 extends infer r ? r extends true ? 返回值 : r : 错误<'计算约束失败'>;
133
+
134
+ declare type 或<a1, a2> = a1 extends true ? true : a2 extends true ? true : false;
135
+
136
+ declare type 非<a> = a extends true ? false : true;
137
+
138
+ export { 与, 元组转联合, 删除对象指定键, 删除数组最后一个, 删除数组第一个, 判定双层数组, 包装非数组, 去除单层数组, 反转字符串, 取对象值们, 取对象第一个键值, 取对象键们, 取对象键值们, 取对象长度, 取数组最后一个, 取数组第一个, 后继数, 基础类型等于, 字符串以某值开头, 字符串转数字, 或, 数字转字符串, 数组反转, 数组存在元素, 数组过滤, 数组长度判定, 是never, 是unknown, 是基础类型, 是错误, 替换对象键, 替换数组字符串, 检查, 求和, 生成json, 等于, 联合转元组, 解析json, 计算函数类型, 计算条件, 错误, 非 };
@@ -0,0 +1,2 @@
1
+ // src/通用/错误.ts
2
+ var __ERROR__ = Symbol();
package/package.json ADDED
@@ -0,0 +1,34 @@
1
+ {
2
+ "name": "@lsby/ts-type-func",
3
+ "version": "0.0.1",
4
+ "main": "dist/esm/index.mjs",
5
+ "exports": {
6
+ "require": "./dist/cjs/index.js",
7
+ "import": "./dist/esm/index.mjs"
8
+ },
9
+ "files": [
10
+ "/dist/**/*"
11
+ ],
12
+ "description": "",
13
+ "scripts": {
14
+ "pub": "npm run build && npm publish --access=public",
15
+ "build:esm": "tsup src/index.ts --format esm --clean --dts -d dist/esm",
16
+ "build:cjs": "tsup src/index.ts --format cjs --clean --dts -d dist/cjs",
17
+ "build": "npm run build:esm && npm run build:cjs"
18
+ },
19
+ "author": "",
20
+ "devDependencies": {
21
+ "tsup": "^7.2.0",
22
+ "typescript": "^4.5.2"
23
+ },
24
+ "repository": {
25
+ "type": "git",
26
+ "url": "git+https://github.com/lsby/ts_tpe_fun.git"
27
+ },
28
+ "keywords": [],
29
+ "license": "ISC",
30
+ "bugs": {
31
+ "url": "https://github.com/lsby/ts_tpe_fun/issues"
32
+ },
33
+ "homepage": "https://github.com/lsby/ts_tpe_fun#readme"
34
+ }
package/readme.md ADDED
@@ -0,0 +1,3 @@
1
+ # ts_type_fun
2
+
3
+ 一些ts的类型等级计算