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,
|
||||
E,
|
||||
VNodeProps & AllowedComponentProps & ComponentCustomProps
|
||||
>
|
||||
> &
|
||||
Readonly<ExtractPropTypes<PropsOptions>>
|
||||
> &
|
||||
ComponentOptionsWithObjectProps<
|
||||
PropsOptions,
|
||||
|
@ -94,7 +94,7 @@ describe('with object props', () => {
|
||||
// default + function
|
||||
ffff: {
|
||||
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: {
|
||||
type: String,
|
||||
@ -799,3 +799,58 @@ describe('componentOptions setup should be `SetupContext`', () => {
|
||||
ctx: SetupContext
|
||||
) => 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…
Reference in New Issue
Block a user