Просмотр исходного кода

fix(compiler-sfc): disallow `expose` property in `defineOptions` (#7967)

三咲智子 Kevin Deng 3 лет назад
Родитель
Сommit
93f77292c9

+ 8 - 0
packages/compiler-sfc/src/compileScript.ts

@@ -684,6 +684,7 @@ export function compileScript(
 
     let propsOption = undefined
     let emitsOption = undefined
+    let exposeOption = undefined
     if (optionsRuntimeDecl.type === 'ObjectExpression') {
       for (const prop of optionsRuntimeDecl.properties) {
         if (
@@ -692,6 +693,7 @@ export function compileScript(
         ) {
           if (prop.key.name === 'props') propsOption = prop
           if (prop.key.name === 'emits') emitsOption = prop
+          if (prop.key.name === 'expose') exposeOption = prop
         }
       }
     }
@@ -708,6 +710,12 @@ export function compileScript(
         emitsOption
       )
     }
+    if (exposeOption) {
+      error(
+        `${DEFINE_OPTIONS}() cannot be used to declare expose. Use ${DEFINE_EXPOSE}() instead.`,
+        exposeOption
+      )
+    }
 
     return true
   }

+ 1 - 1
packages/runtime-core/src/apiSetupHelpers.ts

@@ -169,7 +169,7 @@ export function defineOptions<
     Extends,
     E,
     EE
-  > & { emits?: undefined }
+  > & { emits?: undefined; expose?: undefined }
 ): void {
   if (__DEV__) {
     warnRuntimeUsage(`defineOptions`)