+return { }
+}
+
+})"
+`;
+
+exports[`SFC compile <script setup> with TypeScript defineProps w/ exported interface in normal script 1`] = `
+"import { defineComponent as _defineComponent } from 'vue'
+
+ export interface Props { x?: number }
+
+export default /*#__PURE__*/_defineComponent({
+ props: {
+ x: { type: Number, required: false }
+ },
+ setup(__props: any, { expose }) {
+ expose()
+
+
+
return { }
}
})
})
+ test('defineProps w/ exported interface in normal script', () => {
+ const { content, bindings } = compile(`
+ <script lang="ts">
+ export interface Props { x?: number }
+ </script>
+ <script setup lang="ts">
+ defineProps<Props>()
+ </script>
+ `)
+ assertCode(content)
+ expect(content).toMatch(`x: { type: Number, required: false }`)
+ expect(bindings).toStrictEqual({
+ x: BindingTypes.PROPS
+ })
+ })
+
test('defineProps w/ type alias', () => {
const { content, bindings } = compile(`
<script setup lang="ts">
return isQualifiedType(node.declaration)
}
}
-
- for (const node of scriptSetupAst.body) {
+ const body = scriptAst
+ ? [...scriptSetupAst.body, ...scriptAst.body]
+ : scriptSetupAst.body
+ for (const node of body) {
const qualified = isQualifiedType(node)
if (qualified) {
return qualified
}
// 1. process normal <script> first if it exists
- let scriptAst
+ let scriptAst: Program | undefined
if (script) {
// import dedupe between <script> and <script setup>
scriptAst = parse(