Skip to content

Commit 3c3dc80

Browse files
committed
test: add dts tests for defineComponent
fix
1 parent 484050f commit 3c3dc80

File tree

6 files changed

+637
-14
lines changed

6 files changed

+637
-14
lines changed

src/component/componentOptions.ts

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,7 @@
11
import { Data } from './common'
22
import { ComponentPropsOptions, ExtractPropTypes } from './componentProps'
33
import { VNode } from 'vue'
4-
import {
5-
ComponentInstance,
6-
VueProxy,
7-
ComponentRenderProxy,
8-
} from './componentProxy'
4+
import { ComponentInstance, ComponentRenderProxy } from './componentProxy'
95

106
import { ComponentOptions as Vue2ComponentOptions } from 'vue'
117

@@ -52,7 +48,7 @@ interface ComponentOptionsBase<
5248
Vue2ComponentOptions<Vue, D, M, C, Props>,
5349
'data' | 'computed' | 'method' | 'setup' | 'props'
5450
> {
55-
data?: D | (() => D)
51+
data?: (this: Props, vm: Props) => D
5652
computed?: C
5753
methods?: M
5854
}

src/component/componentProxy.ts

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -25,18 +25,19 @@ export type ComponentRenderProxy<
2525
PublicProps = P
2626
> = {
2727
$data: D
28-
$props: P & PublicProps
28+
$props: Readonly<P & PublicProps>
2929
$attrs: Data
3030
$refs: Data
3131
$slots: Data
3232
$root: ComponentInstance | null
3333
$parent: ComponentInstance | null
3434
$emit: (event: string, ...args: unknown[]) => void
35-
} & P &
35+
} & Readonly<P> &
3636
UnwrapRef<B> &
3737
D &
3838
M &
39-
ExtractComputedReturns<C>
39+
ExtractComputedReturns<C> &
40+
Vue
4041

4142
// for Vetur and TSX support
4243
type VueConstructorProxy<PropsOptions, RawBindings> = VueConstructor & {
@@ -55,8 +56,8 @@ export type VueProxy<
5556
PropsOptions,
5657
RawBindings,
5758
Data = DefaultData<Vue>,
58-
Methods = DefaultMethods<Vue>,
59-
Computed = DefaultComputed
59+
Computed = DefaultComputed,
60+
Methods = DefaultMethods<Vue>
6061
> = Vue2ComponentOptions<
6162
Vue,
6263
UnwrapRef<RawBindings> & Data,

src/component/defineComponent.ts

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
import Vue from 'vue'
12
import { ComponentPropsOptions } from './componentProps'
23
import {
34
MethodOptions,
@@ -8,6 +9,7 @@ import {
89
} from './componentOptions'
910
import { VueProxy } from './componentProxy'
1011
import { Data } from './common'
12+
import { HasDefined } from '../types/basic'
1113

1214
// overload 1: object format with no props
1315
export function defineComponent<
@@ -43,11 +45,18 @@ export function defineComponent<
4345
M extends MethodOptions = {},
4446
PropsOptions extends ComponentPropsOptions = ComponentPropsOptions
4547
>(
46-
options: ComponentOptionsWithProps<PropsOptions, RawBindings, D, C, M>
48+
options: HasDefined<Props> extends true
49+
? ComponentOptionsWithProps<PropsOptions, RawBindings, D, C, M, Props>
50+
: ComponentOptionsWithProps<PropsOptions, RawBindings, D, C, M>
4751
): VueProxy<PropsOptions, RawBindings, D, C, M>
4852
// implementation, close to no-op
4953
export function defineComponent(options: any) {
5054
return options as any
5155
}
5256

53-
export { defineComponent as createComponent }
57+
export const createComponent = ((options: any) => {
58+
if (__DEV__) {
59+
Vue.util.warn('`createComponent` has been renamed to `defineComponent`.')
60+
}
61+
return defineComponent(options)
62+
}) as typeof defineComponent

src/component/index.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
export { defineComponent } from './defineComponent'
1+
export { defineComponent, createComponent } from './defineComponent'
22
export { SetupFunction, SetupContext } from './componentOptions'
33
export { ComponentInstance, ComponentRenderProxy } from './componentProxy'
44
export { Data } from './common'

0 commit comments

Comments
 (0)