types(runtime-core): improve the extracted instance types (#1936)
This commit is contained in:
parent
475dd04ec9
commit
955450f539
@ -189,7 +189,8 @@ export function defineComponent<
|
|||||||
Extends,
|
Extends,
|
||||||
E,
|
E,
|
||||||
VNodeProps & AllowedComponentProps & ComponentCustomProps
|
VNodeProps & AllowedComponentProps & ComponentCustomProps
|
||||||
>
|
> &
|
||||||
|
Readonly<ExtractPropTypes<PropsOptions>>
|
||||||
> &
|
> &
|
||||||
ComponentOptionsWithObjectProps<
|
ComponentOptionsWithObjectProps<
|
||||||
PropsOptions,
|
PropsOptions,
|
||||||
|
@ -94,7 +94,7 @@ describe('with object props', () => {
|
|||||||
// default + function
|
// default + function
|
||||||
ffff: {
|
ffff: {
|
||||||
type: Function as PropType<(a: number, b: string) => { a: boolean }>,
|
type: Function as PropType<(a: number, b: string) => { a: boolean }>,
|
||||||
default: (a: number, b: string) => ({ a: true })
|
default: (a: number, b: string) => ({ a: a > +b })
|
||||||
},
|
},
|
||||||
validated: {
|
validated: {
|
||||||
type: String,
|
type: String,
|
||||||
@ -799,3 +799,58 @@ describe('componentOptions setup should be `SetupContext`', () => {
|
|||||||
ctx: SetupContext
|
ctx: SetupContext
|
||||||
) => any)
|
) => any)
|
||||||
})
|
})
|
||||||
|
|
||||||
|
describe('extract instance type', () => {
|
||||||
|
const Base = defineComponent({
|
||||||
|
props: {
|
||||||
|
baseA: {
|
||||||
|
type: Number,
|
||||||
|
default: 1
|
||||||
|
}
|
||||||
|
}
|
||||||
|
})
|
||||||
|
const MixinA = defineComponent({
|
||||||
|
props: {
|
||||||
|
mA: {
|
||||||
|
type: String,
|
||||||
|
default: ''
|
||||||
|
}
|
||||||
|
}
|
||||||
|
})
|
||||||
|
const CompA = defineComponent({
|
||||||
|
extends: Base,
|
||||||
|
mixins: [MixinA],
|
||||||
|
props: {
|
||||||
|
a: {
|
||||||
|
type: Boolean,
|
||||||
|
default: false
|
||||||
|
},
|
||||||
|
b: {
|
||||||
|
type: String,
|
||||||
|
required: true
|
||||||
|
},
|
||||||
|
c: Number
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
const compA = {} as InstanceType<typeof CompA>
|
||||||
|
|
||||||
|
expectType<boolean>(compA.a)
|
||||||
|
expectType<string>(compA.b)
|
||||||
|
expectType<number | undefined>(compA.c)
|
||||||
|
// mixins
|
||||||
|
expectType<string>(compA.mA)
|
||||||
|
// extends
|
||||||
|
expectType<number>(compA.baseA)
|
||||||
|
|
||||||
|
// @ts-expect-error
|
||||||
|
expectError((compA.a = true))
|
||||||
|
// @ts-expect-error
|
||||||
|
expectError((compA.b = 'foo'))
|
||||||
|
// @ts-expect-error
|
||||||
|
expectError((compA.c = 1))
|
||||||
|
// @ts-expect-error
|
||||||
|
expectError((compA.mA = 'foo'))
|
||||||
|
// @ts-expect-error
|
||||||
|
expectError((compA.baseA = 1))
|
||||||
|
})
|
||||||
|
Loading…
x
Reference in New Issue
Block a user