Ver Fonte

perf(compiler-sfc): infer ref binding type for more built-in methods

Evan You há 3 anos atrás
pai
commit
a370e8006a

+ 15 - 0
packages/compiler-sfc/__tests__/compileScript.spec.ts

@@ -1520,4 +1520,19 @@ describe('SFC genDefaultAs', () => {
     )
     assertCode(content)
   })
+
+  test('binding type for edge cases', () => {
+    const { bindings } = compile(
+      `<script setup lang="ts">
+      import { toRef } from 'vue'
+      const props = defineProps<{foo: string}>()
+      const foo = toRef(() => props.foo)
+      </script>`
+    )
+    expect(bindings).toStrictEqual({
+      toRef: BindingTypes.SETUP_CONST,
+      props: BindingTypes.SETUP_REACTIVE_CONST,
+      foo: BindingTypes.SETUP_REF
+    })
+  })
 })

+ 1 - 1
packages/compiler-sfc/__tests__/compileScript/defineProps.spec.ts

@@ -581,7 +581,7 @@ const props = defineProps({ foo: String })
     </script>
   `)
     expect(bindings).toStrictEqual({
-      bar: BindingTypes.SETUP_MAYBE_REF,
+      bar: BindingTypes.SETUP_REF,
       computed: BindingTypes.SETUP_CONST
     })
   })

+ 10 - 2
packages/compiler-sfc/src/compileScript.ts

@@ -1095,8 +1095,16 @@ function walkDeclaration(
             : BindingTypes.SETUP_CONST
         } else if (isConst) {
           if (
-            isCallOf(init, userImportAliases['ref']) ||
-            isCallOf(init, DEFINE_MODEL)
+            isCallOf(
+              init,
+              m =>
+                m === userImportAliases['ref'] ||
+                m === userImportAliases['computed'] ||
+                m === userImportAliases['shallowRef'] ||
+                m === userImportAliases['customRef'] ||
+                m === userImportAliases['toRef'] ||
+                m === DEFINE_MODEL
+            )
           ) {
             bindingType = BindingTypes.SETUP_REF
           } else {