Skip to content

Commit

Permalink
fix(types): incorrect type inference of array
Browse files Browse the repository at this point in the history
  • Loading branch information
Amour1688 committed Sep 13, 2021
1 parent a6e5f82 commit 33bdcf0
Show file tree
Hide file tree
Showing 2 changed files with 30 additions and 30 deletions.
6 changes: 5 additions & 1 deletion packages/runtime-core/src/apiDefineComponent.ts
Expand Up @@ -41,7 +41,11 @@ export type DefineComponent<
E extends EmitsOptions = {},
EE extends string = string,
PP = PublicProps,
Props = Readonly<ExtractPropTypes<PropsOrPropOptions>> &
Props = Readonly<
PropsOrPropOptions extends ComponentPropsOptions
? ExtractPropTypes<PropsOrPropOptions>
: PropsOrPropOptions
> &
({} extends E ? {} : EmitsToProps<E>),
Defaults = ExtractDefaultPropTypes<PropsOrPropOptions>
> = ComponentPublicInstanceConstructor<
Expand Down
54 changes: 25 additions & 29 deletions test-dts/defineComponent.test-d.tsx
Expand Up @@ -333,35 +333,31 @@ describe('with object props', () => {
})
})

// describe('type inference w/ optional props declaration', () => {
// const MyComponent = defineComponent({
// setup(_props: { msg: string }) {
// return {
// a: 1
// }
// },
// render() {
// expectType<string>(this.$props.msg)
// // props should be readonly
// expectError((this.$props.msg = 'foo'))
// // should not expose on `this`
// expectError(this.msg)
// expectType<number>(this.a)
// return null
// }
// })

// expectType<JSX.Element>(<MyComponent msg="foo" />)
// expectError(<MyComponent />)
// expectError(<MyComponent msg={1} />)
// })

// describe('type inference w/ direct setup function', () => {
// const MyComponent = defineComponent((_props: { msg: string }) => {})
// expectType<JSX.Element>(<MyComponent msg="foo" />)
// expectError(<MyComponent />)
// expectError(<MyComponent msg={1} />)
// })
describe('type inference w/ optional props declaration', () => {
const MyComponent = defineComponent<{ a: string[]; msg: string }>({
setup(props) {
expectType<string>(props.msg)
expectType<string[]>(props.a)
return {
b: 1
}
}
})

expectType<JSX.Element>(<MyComponent msg="1" a={['1']} />)
// @ts-expect-error
expectError(<MyComponent />)
// @ts-expect-error
expectError(<MyComponent msg="1" />)
})

describe('type inference w/ direct setup function', () => {
const MyComponent = defineComponent((_props: { msg: string }) => {})
expectType<JSX.Element>(<MyComponent msg="foo" />)
// @ts-expect-error
expectError(<MyComponent />)
expectError(<MyComponent msg="1" />)
})

describe('type inference w/ array props declaration', () => {
const MyComponent = defineComponent({
Expand Down

0 comments on commit 33bdcf0

Please sign in to comment.