Skip to content

Commit

Permalink
test: add dts tests for defineComponent
Browse files Browse the repository at this point in the history
fix
  • Loading branch information
antfu committed Jun 24, 2020
1 parent 484050f commit 3c3dc80
Show file tree
Hide file tree
Showing 6 changed files with 637 additions and 14 deletions.
8 changes: 2 additions & 6 deletions src/component/componentOptions.ts
@@ -1,11 +1,7 @@
import { Data } from './common'
import { ComponentPropsOptions, ExtractPropTypes } from './componentProps'
import { VNode } from 'vue'
import {
ComponentInstance,
VueProxy,
ComponentRenderProxy,
} from './componentProxy'
import { ComponentInstance, ComponentRenderProxy } from './componentProxy'

import { ComponentOptions as Vue2ComponentOptions } from 'vue'

Expand Down Expand Up @@ -52,7 +48,7 @@ interface ComponentOptionsBase<
Vue2ComponentOptions<Vue, D, M, C, Props>,
'data' | 'computed' | 'method' | 'setup' | 'props'
> {
data?: D | (() => D)
data?: (this: Props, vm: Props) => D
computed?: C
methods?: M
}
Expand Down
11 changes: 6 additions & 5 deletions src/component/componentProxy.ts
Expand Up @@ -25,18 +25,19 @@ export type ComponentRenderProxy<
PublicProps = P
> = {
$data: D
$props: P & PublicProps
$props: Readonly<P & PublicProps>
$attrs: Data
$refs: Data
$slots: Data
$root: ComponentInstance | null
$parent: ComponentInstance | null
$emit: (event: string, ...args: unknown[]) => void
} & P &
} & Readonly<P> &
UnwrapRef<B> &
D &
M &
ExtractComputedReturns<C>
ExtractComputedReturns<C> &
Vue

// for Vetur and TSX support
type VueConstructorProxy<PropsOptions, RawBindings> = VueConstructor & {
Expand All @@ -55,8 +56,8 @@ export type VueProxy<
PropsOptions,
RawBindings,
Data = DefaultData<Vue>,
Methods = DefaultMethods<Vue>,
Computed = DefaultComputed
Computed = DefaultComputed,
Methods = DefaultMethods<Vue>
> = Vue2ComponentOptions<
Vue,
UnwrapRef<RawBindings> & Data,
Expand Down
13 changes: 11 additions & 2 deletions src/component/defineComponent.ts
@@ -1,3 +1,4 @@
import Vue from 'vue'
import { ComponentPropsOptions } from './componentProps'
import {
MethodOptions,
Expand All @@ -8,6 +9,7 @@ import {
} from './componentOptions'
import { VueProxy } from './componentProxy'
import { Data } from './common'
import { HasDefined } from '../types/basic'

// overload 1: object format with no props
export function defineComponent<
Expand Down Expand Up @@ -43,11 +45,18 @@ export function defineComponent<
M extends MethodOptions = {},
PropsOptions extends ComponentPropsOptions = ComponentPropsOptions
>(
options: ComponentOptionsWithProps<PropsOptions, RawBindings, D, C, M>
options: HasDefined<Props> extends true
? ComponentOptionsWithProps<PropsOptions, RawBindings, D, C, M, Props>
: ComponentOptionsWithProps<PropsOptions, RawBindings, D, C, M>
): VueProxy<PropsOptions, RawBindings, D, C, M>
// implementation, close to no-op
export function defineComponent(options: any) {
return options as any
}

export { defineComponent as createComponent }
export const createComponent = ((options: any) => {
if (__DEV__) {
Vue.util.warn('`createComponent` has been renamed to `defineComponent`.')
}
return defineComponent(options)
}) as typeof defineComponent
2 changes: 1 addition & 1 deletion src/component/index.ts
@@ -1,4 +1,4 @@
export { defineComponent } from './defineComponent'
export { defineComponent, createComponent } from './defineComponent'
export { SetupFunction, SetupContext } from './componentOptions'
export { ComponentInstance, ComponentRenderProxy } from './componentProxy'
export { Data } from './common'
Expand Down

0 comments on commit 3c3dc80

Please sign in to comment.