Skip to content

Commit

Permalink
fix(types): update setup binding unwrap types for 6b10f0c
Browse files Browse the repository at this point in the history
close #738
  • Loading branch information
yyx990803 committed Feb 19, 2020
1 parent 8d817bb commit a840e7d
Show file tree
Hide file tree
Showing 2 changed files with 35 additions and 9 deletions.
22 changes: 17 additions & 5 deletions packages/runtime-core/src/componentProxy.ts
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,13 @@ import {
ComputedOptions,
MethodOptions
} from './apiOptions'
import { UnwrapRef, ReactiveEffect, isRef, isReactive } from '@vue/reactivity'
import {
ReactiveEffect,
isRef,
isReactive,
Ref,
ComputedRef
} from '@vue/reactivity'
import { warn } from './warning'
import { Slots } from './componentSlots'
import {
Expand All @@ -19,9 +25,9 @@ import {
// public properties exposed on the proxy, which is used as the render context
// in templates (as `this` in the render option)
export type ComponentPublicInstance<
P = {},
B = {},
D = {},
P = {}, // props type extracted from props option
B = {}, // raw bindings returned from setup()
D = {}, // return from data()
C extends ComputedOptions = {},
M extends MethodOptions = {},
PublicProps = P
Expand All @@ -40,11 +46,17 @@ export type ComponentPublicInstance<
$nextTick: typeof nextTick
$watch: typeof instanceWatch
} & P &
UnwrapRef<B> &
UnwrapSetupBindings<B> &
D &
ExtractComputedReturns<C> &
M

type UnwrapSetupBindings<B> = { [K in keyof B]: UnwrapBinding<B[K]> }

type UnwrapBinding<B> = B extends ComputedRef<any>
? B extends ComputedRef<infer V> ? V : B
: B extends Ref<infer V> ? V : B

const publicPropertiesMap: Record<
string,
(i: ComponentInternalInstance) => any
Expand Down
22 changes: 18 additions & 4 deletions test-dts/defineComponent.test-d.tsx
Original file line number Diff line number Diff line change
@@ -1,5 +1,13 @@
import { expectError, expectType } from 'tsd'
import { describe, defineComponent, PropType, ref, createApp } from './index'
import {
describe,
defineComponent,
PropType,
ref,
Ref,
reactive,
createApp
} from './index'

describe('with object props', () => {
interface ExpectedProps {
Expand Down Expand Up @@ -57,11 +65,14 @@ describe('with object props', () => {
// setup context
return {
c: ref(1),
d: {
d: reactive({
e: ref('hi')
},
f: {
}),
f: reactive({
g: ref('hello' as GT)
}),
h: {
i: ref('hi')
}
}
},
Expand Down Expand Up @@ -95,6 +106,9 @@ describe('with object props', () => {
expectType<string>(this.d.e)
expectType<GT>(this.f.g)

// should not unwrap refs nested under non-reactive objects
expectType<Ref<string>>(this.h.i)

// setup context properties should be mutable
this.c = 2

Expand Down

0 comments on commit a840e7d

Please sign in to comment.