+return { props, get defaults() { return defaults } }
+}
+
+})"
+`;
+
+exports[`SFC compile <script setup> > with TypeScript > withDefaults (reference) 1`] = `
+"import { mergeDefaults as _mergeDefaults, defineComponent as _defineComponent } from 'vue'
+import { defaults } from './foo'
+
+export default /*#__PURE__*/_defineComponent({
+ props: _mergeDefaults({
+ foo: { type: String, required: false },
+ bar: { type: Number, required: false },
+ baz: { type: Boolean, required: true }
+ }, defaults),
+ setup(__props: any, { expose: __expose }) {
+ __expose();
+
+const props = __props as {
+ foo?: string
+ bar?: number
+ baz: boolean
+ };
+
+
+
return { props, get defaults() { return defaults } }
}
)
})
+ test('withDefaults (reference)', () => {
+ const { content } = compile(`
+ <script setup lang="ts">
+ import { defaults } from './foo'
+ const props = withDefaults(defineProps<{
+ foo?: string
+ bar?: number
+ baz: boolean
+ }>(), defaults)
+ </script>
+ `)
+ assertCode(content)
+ expect(content).toMatch(`import { mergeDefaults as _mergeDefaults`)
+ expect(content).toMatch(
+ `
+ _mergeDefaults({
+ foo: { type: String, required: false },
+ bar: { type: Number, required: false },
+ baz: { type: Boolean, required: true }
+ }, defaults)`.trim()
+ )
+ })
+
// #7111
test('withDefaults (dynamic) w/ production mode', () => {
const { content } = compile(
let hasDefaultExportRender = false
let hasDefineOptionsCall = false
let propsRuntimeDecl: Node | undefined
- let propsRuntimeDefaults: ObjectExpression | undefined
+ let propsRuntimeDefaults: Node | undefined
let propsDestructureDecl: Node | undefined
let propsDestructureRestId: string | undefined
let propsTypeDecl: PropsDeclType | undefined
node.callee
)
}
- propsRuntimeDefaults = node.arguments[1] as ObjectExpression
- if (
- !propsRuntimeDefaults ||
- propsRuntimeDefaults.type !== 'ObjectExpression'
- ) {
- error(
- `The 2nd argument of ${WITH_DEFAULTS} must be an object literal.`,
- propsRuntimeDefaults || node
- )
+ propsRuntimeDefaults = node.arguments[1]
+ if (!propsRuntimeDefaults) {
+ error(`The 2nd argument of ${WITH_DEFAULTS} is required.`, node)
}
} else {
error(
destructured.needSkipFactory ? `, skipFactory: true` : ``
}`
} else if (hasStaticDefaults) {
- const prop = propsRuntimeDefaults!.properties.find(node => {
+ const prop = (
+ propsRuntimeDefaults as ObjectExpression
+ ).properties.find(node => {
if (node.type === 'SpreadElement') return false
return resolveObjectKey(node.key, node.computed) === key
}) as ObjectProperty | ObjectMethod
m.key.type === 'Identifier'
) {
if (
- propsRuntimeDefaults!.properties.some(p => {
+ (propsRuntimeDefaults as ObjectExpression).properties.some(p => {
if (p.type === 'SpreadElement') return false
return (
resolveObjectKey(p.key, p.computed) ===