Skip to content

Commit 18e663d

Browse files
committed
fix(parser): should cast any type to any
1 parent ba21839 commit 18e663d

File tree

3 files changed

+36
-19
lines changed

3 files changed

+36
-19
lines changed

packages/parser/src/types.ts

Lines changed: 30 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import type { MaybeArray, Prettify } from "@clerc/utils";
1+
import type { IsAny, MaybeArray, Prettify } from "@clerc/utils";
22

33
import type { KNOWN_FLAG, PARAMETER, UNKNOWN_FLAG } from "./iterator";
44

@@ -115,25 +115,36 @@ type InferFlagDefault<T extends FlagDefinitionValue, Fallback> = T extends {
115115
? DefaultType
116116
: Fallback;
117117

118+
type IsTypeAny<T extends FlagDefinitionValue> =
119+
IsAny<T> extends true
120+
? true
121+
: T extends { type: infer Type }
122+
? IsAny<Type> extends true
123+
? true
124+
: false
125+
: false;
126+
118127
type _InferFlags<T extends FlagsDefinition> = {
119-
[K in keyof T]: T[K] extends
120-
| readonly [BooleanConstructor]
121-
| { type: readonly [BooleanConstructor] }
122-
? number
123-
: T[K] extends ObjectConstructor | { type: ObjectConstructor }
124-
? ObjectInputType
125-
: T[K] extends
126-
| readonly [FlagType<infer U>]
127-
| { type: readonly [FlagType<infer U>] }
128-
? U[] | InferFlagDefault<T[K], never>
129-
: T[K] extends FlagType<infer U> | { type: FlagType<infer U> }
130-
?
131-
| U
132-
| InferFlagDefault<
133-
T[K],
134-
[U] extends [boolean] ? never : undefined
135-
>
136-
: never;
128+
[K in keyof T]: IsTypeAny<T[K]> extends true
129+
? any
130+
: T[K] extends
131+
| readonly [BooleanConstructor]
132+
| { type: readonly [BooleanConstructor] }
133+
? number
134+
: T[K] extends ObjectConstructor | { type: ObjectConstructor }
135+
? ObjectInputType
136+
: T[K] extends
137+
| readonly [FlagType<infer U>]
138+
| { type: readonly [FlagType<infer U>] }
139+
? U[] | InferFlagDefault<T[K], never>
140+
: T[K] extends FlagType<infer U> | { type: FlagType<infer U> }
141+
?
142+
| U
143+
| InferFlagDefault<
144+
T[K],
145+
[U] extends [boolean] ? never : undefined
146+
>
147+
: never;
137148
};
138149

139150
/**

packages/parser/test/types.test-d.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,8 @@ describe("parser types", () => {
5454
numberWithDefault: { type: Number, default: 42 },
5555
arrayStringWithDefault: { type: [String], default: ["a", "b"] },
5656
weirdType: { type: String, default: 123 }, // should be string | number
57+
any1: Boolean as any,
58+
any2: { type: Boolean as any },
5759
},
5860
});
5961
expectTypeOf(result.flags).toEqualTypeOf<{
@@ -62,6 +64,8 @@ describe("parser types", () => {
6264
numberWithDefault: number;
6365
arrayStringWithDefault: string[];
6466
weirdType: string | number;
67+
any1: any;
68+
any2: any;
6569
}>();
6670
});
6771
});

packages/utils/src/types/type-fest.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,3 +32,5 @@ export type DeepPrettify<T, E = never> = ConditionalDeepPrettify<
3232
E | NonRecursiveType | MapsSetsOrArrays,
3333
object
3434
>;
35+
36+
export type IsAny<T> = 0 extends 1 & T ? true : false;

0 commit comments

Comments
 (0)