import { warn } from './warning'
import { VNodeChild } from './vnode'
import { callWithAsyncErrorHandling } from './errorHandling'
-import { UnionToIntersection } from './helpers/typeUtils'
+import { LooseRequired, UnionToIntersection } from './helpers/typeUtils'
import { deepMergeData } from './compat/data'
import { DeprecationTypes } from './compat/compatConfig'
import {
ComponentCustomOptions {
setup?: (
this: void,
- props: Props &
- UnionToIntersection<ExtractOptionProp<Mixin>> &
- UnionToIntersection<ExtractOptionProp<Extends>>,
+ props: Readonly<
+ LooseRequired<
+ Props &
+ UnionToIntersection<ExtractOptionProp<Mixin>> &
+ UnionToIntersection<ExtractOptionProp<Extends>>
+ >
+ >,
ctx: SetupContext<E>
) => Promise<RawBindings> | RawBindings | RenderFunction | void
name?: string
expectType,
ShallowUnwrapRef,
FunctionalComponent,
- ComponentPublicInstance
+ ComponentPublicInstance,
+ toRefs
} from './index'
declare function extractComponentOptions<Props, RawBindings>(
object?: object
}
+ interface ExpectedRefs {
+ a: Ref<number | undefined>
+ b: Ref<string>
+ e: Ref<Function | undefined>
+ bb: Ref<string>
+ bbb: Ref<string>
+ cc: Ref<string[] | undefined>
+ dd: Ref<{ n: 1 }>
+ ee: Ref<(() => string) | undefined>
+ ff: Ref<((a: number, b: string) => { a: boolean }) | undefined>
+ ccc: Ref<string[] | undefined>
+ ddd: Ref<string[]>
+ eee: Ref<() => { a: string }>
+ fff: Ref<(a: number, b: string) => { a: boolean }>
+ hhh: Ref<boolean>
+ ggg: Ref<'foo' | 'bar'>
+ ffff: Ref<(a: number, b: string) => { a: boolean }>
+ validated: Ref<string | undefined>
+ object: Ref<object | undefined>
+ }
+
describe('defineComponent', () => {
const MyComponent = defineComponent({
props: {
object: Object as PropType<object>
},
setup(props) {
+ const refs = toRefs(props)
+ expectType<ExpectedRefs['a']>(refs.a)
+ expectType<ExpectedRefs['b']>(refs.b)
+ expectType<ExpectedRefs['e']>(refs.e)
+ expectType<ExpectedRefs['bb']>(refs.bb)
+ expectType<ExpectedRefs['bbb']>(refs.bbb)
+ expectType<ExpectedRefs['cc']>(refs.cc)
+ expectType<ExpectedRefs['dd']>(refs.dd)
+ expectType<ExpectedRefs['ee']>(refs.ee)
+ expectType<ExpectedRefs['ff']>(refs.ff)
+ expectType<ExpectedRefs['ccc']>(refs.ccc)
+ expectType<ExpectedRefs['ddd']>(refs.ddd)
+ expectType<ExpectedRefs['eee']>(refs.eee)
+ expectType<ExpectedRefs['fff']>(refs.fff)
+ expectType<ExpectedRefs['hhh']>(refs.hhh)
+ expectType<ExpectedRefs['ggg']>(refs.ggg)
+ expectType<ExpectedRefs['ffff']>(refs.ffff)
+ expectType<ExpectedRefs['validated']>(refs.validated)
+ expectType<ExpectedRefs['object']>(refs.object)
+
return {
setupA: 1,
setupB: ref(1),