Skip to content

Commit 7aa25ee

Browse files
authored
fix PropType (#446)
* fix: some types set by PropType was any reverts #444 * fix: Function PropType become undefined
1 parent 7fa805c commit 7aa25ee

File tree

3 files changed

+25
-3
lines changed

3 files changed

+25
-3
lines changed

src/component/componentProps.ts

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ type ExtractFunctionPropType<
4343
T extends Function,
4444
TArgs extends Array<any> = any[],
4545
TResult = any
46-
> = T extends (...args: TArgs) => TResult ? T : any
46+
> = T extends (...args: TArgs) => TResult ? T : never
4747

4848
type ExtractCorrectPropType<T> = T extends Function
4949
? ExtractFunctionPropType<T>
@@ -58,8 +58,10 @@ type InferPropType<T> = T extends null
5858
? { [key: string]: any }
5959
: T extends BooleanConstructor | { type: BooleanConstructor }
6060
? boolean
61-
: T extends Prop<infer V>
62-
? ExtractCorrectPropType<V> : T;
61+
: T extends FunctionConstructor
62+
? Function
63+
: T extends Prop<infer V>
64+
? ExtractCorrectPropType<V> : T;
6365

6466
export type ExtractPropTypes<
6567
O,

test-dts/defineComponent.test-d.ts

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ import {
33
reactive,
44
expectType,
55
expectError,
6+
isNotAnyOrUndefined,
67
defineComponent,
78
PropType,
89
} from './index'
@@ -88,6 +89,20 @@ describe('with object props', () => {
8889
expectType<ExpectedProps['fff']>(props.fff)
8990
expectType<ExpectedProps['hhh']>(props.hhh)
9091

92+
isNotAnyOrUndefined(props.a)
93+
isNotAnyOrUndefined(props.b)
94+
isNotAnyOrUndefined(props.e)
95+
isNotAnyOrUndefined(props.bb)
96+
isNotAnyOrUndefined(props.cc)
97+
isNotAnyOrUndefined(props.dd)
98+
isNotAnyOrUndefined(props.ee)
99+
isNotAnyOrUndefined(props.ff)
100+
isNotAnyOrUndefined(props.ccc)
101+
isNotAnyOrUndefined(props.ddd)
102+
isNotAnyOrUndefined(props.eee)
103+
isNotAnyOrUndefined(props.fff)
104+
isNotAnyOrUndefined(props.hhh)
105+
91106
expectError((props.a = 1))
92107

93108
// setup context

test-dts/index.d.ts

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,3 +5,8 @@ export function describe(_name: string, _fn: () => void): void
55
export function expectType<T>(value: T): void
66
export function expectError<T>(value: T): void
77
export function expectAssignable<T, T2 extends T = T>(value: T2): void
8+
9+
// https://stackoverflow.com/questions/49927523/disallow-call-with-any/49928360#49928360
10+
type IfNotAny<T> = 0 extends 1 & T ? never : T
11+
type IfNotUndefined<T> = Exclude<T, undefined> extends never ? never : T
12+
export function isNotAnyOrUndefined<T>(value: IfNotAny<IfNotUndefined<T>>): void

0 commit comments

Comments
 (0)