})"
`;
+exports[`defineEmits > w/ type (interface w/ extends) 1`] = `
+"import { defineComponent as _defineComponent } from 'vue'
+interface Base { (e: 'foo'): void }
+ interface Emits extends Base { (e: 'bar'): void }
+
+export default /*#__PURE__*/_defineComponent({
+ emits: [\\"bar\\", \\"foo\\"],
+ setup(__props, { expose: __expose, emit: __emit }) {
+ __expose();
+
+ const emit = __emit
+
+return { emit }
+}
+
+})"
+`;
+
exports[`defineEmits > w/ type (interface) 1`] = `
"import { defineComponent as _defineComponent } from 'vue'
interface Emits { (e: 'foo' | 'bar'): void }
expect(content).toMatch(`emits: ["foo", "bar"]`)
})
+ test('w/ type (interface w/ extends)', () => {
+ const { content } = compile(`
+ <script setup lang="ts">
+ interface Base { (e: 'foo'): void }
+ interface Emits extends Base { (e: 'bar'): void }
+ const emit = defineEmits<Emits>()
+ </script>
+ `)
+ assertCode(content)
+ expect(content).toMatch(`emits: ["bar", "foo"]`)
+ })
+
test('w/ type (exported interface)', () => {
const { content } = compile(`
<script setup lang="ts">
continue
}
try {
- const { props } = resolveTypeElements(ctx, ext, scope)
+ const { props, calls } = resolveTypeElements(ctx, ext, scope)
for (const key in props) {
if (!hasOwn(base.props, key)) {
base.props[key] = props[key]
}
}
+ if (calls) {
+ ;(base.calls || (base.calls = [])).push(...calls)
+ }
} catch (e) {
ctx.error(
`Failed to resolve extends base type.\nIf this previously worked in 3.2, ` +