Skip to content

Commit 13ac1ef

Browse files
authored
reapply #352 and fix test (#371)
1 parent 8322fc7 commit 13ac1ef

File tree

2 files changed

+13
-2
lines changed

2 files changed

+13
-2
lines changed

src/component/componentProps.ts

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,16 @@ type RequiredKeys<T, MakeDefaultRequired> = {
3434

3535
type OptionalKeys<T, MakeDefaultRequired> = Exclude<keyof T, RequiredKeys<T, MakeDefaultRequired>>;
3636

37+
type ExtractFunctionPropType<
38+
T extends Function,
39+
TArgs extends Array<any> = any[],
40+
TResult = any
41+
> = T extends (...args: TArgs) => TResult ? T : never;
42+
43+
type ExtractCorrectPropType<T> = T extends Function
44+
? ExtractFunctionPropType<T>
45+
: Exclude<T, Function>;
46+
3747
// prettier-ignore
3848
type InferPropType<T> = T extends null
3949
? any // null & true would fail to infer
@@ -43,7 +53,8 @@ type InferPropType<T> = T extends null
4353
? { [key: string]: any }
4454
: T extends BooleanConstructor | { type: BooleanConstructor }
4555
? boolean
46-
: T extends Prop<infer V> ? V : T;
56+
: T extends Prop<infer V>
57+
? ExtractCorrectPropType<V> : T;
4758

4859
export type ExtractPropTypes<O, MakeDefaultRequired extends boolean = true> = O extends object
4960
? { [K in RequiredKeys<O, MakeDefaultRequired>]: InferPropType<O[K]> } &

test/types/defineComponent.spec.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -122,7 +122,7 @@ describe('defineComponent', () => {
122122
},
123123
setup(props) {
124124
type PropsType = typeof props;
125-
isSubType<{ user?: User }, PropsType>(true);
125+
isSubType<{ user?: User; func?: () => boolean; userFunc?: (u: User) => User }, PropsType>(true);
126126
isSubType<PropsType, { user?: User; func?: () => boolean; userFunc?: (u: User) => User }>(
127127
true
128128
);

0 commit comments

Comments
 (0)