import { defineCustomElement, defineComponent, type VueElementConstructor } from 'vue' import { expectType, describe, test } from './utils' describe('inject', () => { // with object inject defineCustomElement({ props: { a: String }, inject: { foo: 'foo', bar: 'bar' }, created() { expectType(this.foo) expectType(this.bar) // @ts-expect-error this.foobar = 1 } }) // with array inject defineCustomElement({ props: ['a', 'b'], inject: ['foo', 'bar'], created() { expectType(this.foo) expectType(this.bar) // @ts-expect-error this.foobar = 1 } }) // with no props defineCustomElement({ inject: { foo: { from: 'pbar', default: 'foo' }, bar: { from: 'pfoo', default: 'bar' } }, created() { expectType(this.foo) expectType(this.bar) // @ts-expect-error this.foobar = 1 } }) // without inject defineCustomElement({ props: ['a', 'b'], created() { // @ts-expect-error this.foo = 1 // @ts-expect-error this.bar = 1 } }) }) describe('defineCustomElement using defineComponent return type', () => { test('with emits', () => { const Comp1Vue = defineComponent({ props: { a: String }, emits: { click: () => true } }) const Comp = defineCustomElement(Comp1Vue) expectType(Comp) expectType(new Comp().a) }) })