fix(compiler-core): generate TS-cast safe assignment code for v-model

fix #4655
This commit is contained in:
Evan You
2021-09-22 16:54:59 -04:00
parent 1873f0f48c
commit 686d0149b6
6 changed files with 51 additions and 52 deletions

View File

@@ -76,9 +76,9 @@ export const transformModel: DirectiveTransform = (dir, node, context) => {
if (bindingType === BindingTypes.SETUP_REF) {
// v-model used on known ref.
assignmentExp = createCompoundExpression([
`${eventArg} => (`,
`${eventArg} => ((`,
createSimpleExpression(rawExp, false, exp.loc),
`.value = $event)`
`).value = $event)`
])
} else {
// v-model used on a potentially ref binding in <script setup> inline mode.
@@ -86,16 +86,16 @@ export const transformModel: DirectiveTransform = (dir, node, context) => {
const altAssignment =
bindingType === BindingTypes.SETUP_LET ? `${rawExp} = $event` : `null`
assignmentExp = createCompoundExpression([
`${eventArg} => (${context.helperString(IS_REF)}(${rawExp}) ? `,
`${eventArg} => (${context.helperString(IS_REF)}(${rawExp}) ? (`,
createSimpleExpression(rawExp, false, exp.loc),
`.value = $event : ${altAssignment})`
`).value = $event : ${altAssignment})`
])
}
} else {
assignmentExp = createCompoundExpression([
`${eventArg} => (`,
`${eventArg} => ((`,
exp,
` = $event)`
`) = $event)`
])
}