Skip to content

Commit b4361f1

Browse files
committed
🐞 fix: Fix type error in TypeScript 5.5
Fixed "Type instantiation is excessively deep and possibly infinite" error caused by `NameParams` in TypeScript 5.5.
1 parent 6b87ab0 commit b4361f1

File tree

4 files changed

+32
-21
lines changed

4 files changed

+32
-21
lines changed

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "safunc",
3-
"version": "0.1.0",
3+
"version": "0.1.1",
44
"private": true,
55
"description": "Create runtime-validated functions with ease, supporting optional parameters and overloaded signatures with smart type inference in TypeScript",
66
"keywords": [

src/tools/name-params.ts

Lines changed: 11 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -73,12 +73,15 @@ interface Otherwise<Names extends _[]> {
7373

7474
type Conditions = [...[Condition<any, any>, _[], _[]][], Otherwise<any>];
7575

76-
type CountEq<X, TS extends unknown[], Acc extends number = 0> =
76+
type CountEq<X, TS extends unknown[]> = _CountEq<X, TS> extends infer R extends number ? R : never;
77+
type _CountEq<X, TS extends unknown[], Acc extends number = 0> =
7778
TS extends [] ? Acc
78-
: CountEq<X, TailPart<TS>, Eq<PartElem<HeadPart<TS>>, X> extends true ? Inc<Acc> : Acc>;
79-
type CountEqOneOf<XS extends unknown[], TS extends unknown[], Acc extends number = 0> =
79+
: _CountEq<X, TailPart<TS>, Eq<PartElem<HeadPart<TS>>, X> extends true ? Inc<Acc> : Acc>;
80+
type CountEqOneOf<XS extends unknown[], TS extends unknown[]> =
81+
_CountEqOneOf<XS, TS> extends infer R extends number ? R : never;
82+
type _CountEqOneOf<XS extends unknown[], TS extends unknown[], Acc extends number = 0> =
8083
TS extends [] ? Acc
81-
: CountEqOneOf<
84+
: _CountEqOneOf<
8285
XS,
8386
TailPart<TS>,
8487
_EqOneOf<PartElem<HeadPart<TS>>, XS> extends true ? Inc<Acc> : Acc
@@ -89,9 +92,11 @@ type _EqOneOf<T, XS extends unknown[]> =
8992
true
9093
: _EqOneOf<T, Rest>
9194
: false;
92-
type CountExtends<X, TS extends unknown[], Acc extends number = 0> =
95+
type CountExtends<X, TS extends unknown[]> =
96+
_CountExtends<X, TS> extends infer R extends number ? R : never;
97+
type _CountExtends<X, TS extends unknown[], Acc extends number = 0> =
9398
TS extends [] ? Acc
94-
: CountExtends<X, TailPart<TS>, PartElem<HeadPart<TS>> extends X ? Inc<Acc> : Acc>;
99+
: _CountExtends<X, TailPart<TS>, PartElem<HeadPart<TS>> extends X ? Inc<Acc> : Acc>;
95100

96101
type CountOtherwise<TS extends unknown[], CS extends unknown[], Acc extends number = 0> =
97102
TS extends [] ? Acc

src/tools/number.ts

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import type { CompareStrLength, Reverse, StrToNum } from "./string";
22

3+
export type Ordering = LT | EQ | GT;
34
export type EQ = 0;
45
export type GT = 1;
56
export type LT = -1;
@@ -74,8 +75,13 @@ type _AddDigit<N extends Digit, M extends Digit> =
7475
* Compare two natural numbers.
7576
*/
7677
export type Compare<N extends number, M extends number> =
77-
_CompareListLength<_ToChars<N>, _ToChars<M>> extends EQ ? _CompareDigits<_ToChars<N>, _ToChars<M>>
78-
: _CompareListLength<_ToChars<N>, _ToChars<M>>;
78+
(
79+
_CompareListLength<_ToChars<N>, _ToChars<M>> extends EQ ?
80+
_CompareDigits<_ToChars<N>, _ToChars<M>>
81+
: _CompareListLength<_ToChars<N>, _ToChars<M>>
82+
) extends infer R extends Ordering ?
83+
R
84+
: never;
7985
type _CompareListLength<NS extends unknown[], MS extends unknown[]> =
8086
NS extends [unknown, ...infer ATail extends unknown[]] ?
8187
MS extends [unknown, ...infer BTail extends unknown[]] ?

yarn.lock

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,6 @@
22
# yarn lockfile v1
33

44

5-
"@aashutoshrathi/word-wrap@^1.2.3":
6-
version "1.2.6"
7-
resolved "https://registry.yarnpkg.com/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz#bd9154aec9983f77b3a034ecaa015c2e4201f6cf"
8-
integrity sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==
9-
105
"@ampproject/remapping@^2.2.1":
116
version "2.3.0"
127
resolved "https://registry.yarnpkg.com/@ampproject/remapping/-/remapping-2.3.0.tgz#ed441b6fa600072520ce18b43d2c8cc8caecc7f4"
@@ -2847,16 +2842,16 @@ onetime@^6.0.0:
28472842
mimic-fn "^4.0.0"
28482843

28492844
optionator@^0.9.3:
2850-
version "0.9.3"
2851-
resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.9.3.tgz#007397d44ed1872fdc6ed31360190f81814e2c64"
2852-
integrity sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==
2845+
version "0.9.4"
2846+
resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.9.4.tgz#7ea1c1a5d91d764fb282139c88fe11e182a3a734"
2847+
integrity sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==
28532848
dependencies:
2854-
"@aashutoshrathi/word-wrap" "^1.2.3"
28552849
deep-is "^0.1.3"
28562850
fast-levenshtein "^2.0.6"
28572851
levn "^0.4.1"
28582852
prelude-ls "^1.2.1"
28592853
type-check "^0.4.0"
2854+
word-wrap "^1.2.5"
28602855

28612856
p-event@^5.0.1:
28622857
version "5.0.1"
@@ -3094,9 +3089,9 @@ queue-microtask@^1.2.2:
30943089
integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==
30953090

30963091
react-is@^18.0.0:
3097-
version "18.3.0"
3098-
resolved "https://registry.yarnpkg.com/react-is/-/react-is-18.3.0.tgz#6c2d9b6cdd4c2cffb7c89b1bcb57bc44d12f1993"
3099-
integrity sha512-wRiUsea88TjKDc4FBEn+sLvIDesp6brMbGWnJGjew2waAc9evdhja/2LvePc898HJbHw0L+MTWy7NhpnELAvLQ==
3092+
version "18.3.1"
3093+
resolved "https://registry.yarnpkg.com/react-is/-/react-is-18.3.1.tgz#e83557dc12eae63a99e003a46388b1dcbb44db7e"
3094+
integrity sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==
31003095

31013096
readdirp@~3.6.0:
31023097
version "3.6.0"
@@ -3812,6 +3807,11 @@ why-is-node-running@^2.2.2:
38123807
siginfo "^2.0.0"
38133808
stackback "0.0.2"
38143809

3810+
word-wrap@^1.2.5:
3811+
version "1.2.5"
3812+
resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.5.tgz#d2c45c6dd4fbce621a66f136cbe328afd0410b34"
3813+
integrity sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==
3814+
38153815
"wrap-ansi-cjs@npm:wrap-ansi@^7.0.0", wrap-ansi@^7.0.0:
38163816
version "7.0.0"
38173817
resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43"

0 commit comments

Comments
 (0)