+return { props }
+}
+
+})"
+`;
+
+exports[`SFC compile <script setup> > with TypeScript > withDefaults w/ dynamic object method 1`] = `
+"import { mergeDefaults as _mergeDefaults, defineComponent as _defineComponent } from 'vue'
+
+export default /*#__PURE__*/_defineComponent({
+ props: _mergeDefaults({
+ foo: { type: Function, required: false }
+ }, {
+ ['fo' + 'o']() { return 'foo' }
+ }),
+ setup(__props: any, { expose: __expose }) {
+ __expose();
+
+const props = __props as {
+ foo?: () => 'string'
+ };
+
+
+
return { props }
}
)
})
+ test('withDefaults w/ dynamic object method', () => {
+ const { content } = compile(`
+ <script setup lang="ts">
+ const props = withDefaults(defineProps<{
+ foo?: () => 'string'
+ }>(), {
+ ['fo' + 'o']() { return 'foo' }
+ })
+ </script>
+ `)
+ assertCode(content)
+ expect(content).toMatch(`import { mergeDefaults as _mergeDefaults`)
+ expect(content).toMatch(
+ `
+ _mergeDefaults({
+ foo: { type: Function, required: false }
+ }, {
+ ['fo' + 'o']() { return 'foo' }
+ })`.trim()
+ )
+ })
+
test('defineEmits w/ type', () => {
const { content } = compile(`
<script setup lang="ts">
propsRuntimeDefaults.type === 'ObjectExpression' &&
propsRuntimeDefaults.properties.every(
node =>
- (node.type === 'ObjectProperty' &&
- (!node.computed || node.key.type.endsWith('Literal'))) ||
- node.type === 'ObjectMethod'
+ node.type !== 'SpreadElement' &&
+ (!node.computed || node.key.type.endsWith('Literal'))
)
)
}