]> git.ipfire.org Git - thirdparty/vuejs/core.git/commitdiff
fix(codegen): ensure valid types in genreated code when using global directives
authorEvan You <yyx990803@gmail.com>
Fri, 2 Jul 2021 11:59:47 +0000 (07:59 -0400)
committerEvan You <yyx990803@gmail.com>
Fri, 2 Jul 2021 11:59:47 +0000 (07:59 -0400)
fix #4054

packages/compiler-core/src/codegen.ts

index 6367743d8bc0a2be322123dc1f9195804ed4685f..48ccd180202e3e93bc4aabc74e3877d622e254e1 100644 (file)
@@ -68,10 +68,7 @@ export interface CodegenResult {
 }
 
 export interface CodegenContext
-  extends Omit<
-      Required<CodegenOptions>,
-      'bindingMetadata' | 'inline' | 'isTS'
-    > {
+  extends Omit<Required<CodegenOptions>, 'bindingMetadata' | 'inline'> {
   source: string
   code: string
   line: number
@@ -98,7 +95,8 @@ function createCodegenContext(
     optimizeImports = false,
     runtimeGlobalName = `Vue`,
     runtimeModuleName = `vue`,
-    ssr = false
+    ssr = false,
+    isTS = false
   }: CodegenOptions
 ): CodegenContext {
   const context: CodegenContext = {
@@ -111,6 +109,7 @@ function createCodegenContext(
     runtimeGlobalName,
     runtimeModuleName,
     ssr,
+    isTS,
     source: ast.loc.source,
     code: ``,
     column: 1,
@@ -466,7 +465,7 @@ function genModulePreamble(
 function genAssets(
   assets: string[],
   type: 'component' | 'directive' | 'filter',
-  { helper, push, newline }: CodegenContext
+  { helper, push, newline, isTS }: CodegenContext
 ) {
   const resolver = helper(
     __COMPAT__ && type === 'filter'
@@ -485,7 +484,7 @@ function genAssets(
     push(
       `const ${toValidAssetId(id, type)} = ${resolver}(${JSON.stringify(id)}${
         maybeSelfReference ? `, true` : ``
-      })`
+      })${isTS ? `!` : ``}`
     )
     if (i < assets.length - 1) {
       newline()