diff --git a/packages/plugin-vue/src/template.ts b/packages/plugin-vue/src/template.ts index 6e76333519884b..0fa50b36e5366c 100644 --- a/packages/plugin-vue/src/template.ts +++ b/packages/plugin-vue/src/template.ts @@ -4,7 +4,8 @@ import { compileTemplate, SFCDescriptor, SFCTemplateCompileOptions, - SFCTemplateCompileResults + SFCTemplateCompileResults, + CompilerOptions } from '@vue/compiler-sfc' import { PluginContext, TransformPluginContext } from 'rollup' import { ResolvedOptions } from '.' @@ -157,6 +158,16 @@ export function resolveTemplateCompilerOptions( } } + // if using TS, support TS syntax in template expressions + const expressionPlugins: CompilerOptions['expressionPlugins'] = + options.template?.compilerOptions?.expressionPlugins || [] + if ( + descriptor.script?.lang === 'ts' || + descriptor.scriptSetup?.lang === 'ts' + ) { + expressionPlugins.push('typescript') + } + return { ...options.template, id, @@ -173,7 +184,8 @@ export function resolveTemplateCompilerOptions( compilerOptions: { ...options.template?.compilerOptions, scopeId: hasScoped ? `data-v-${id}` : undefined, - bindingMetadata: resolvedScript ? resolvedScript.bindings : undefined + bindingMetadata: resolvedScript ? resolvedScript.bindings : undefined, + expressionPlugins } } }