最稳、最可控、最不依赖第三方插件的方式是使用 VS Code 内置的 user snippets:通过 Ctrl+Shift+P 调出命令面板,选择 Configure User Snippets → vue.json,粘贴含 prefix 为 v3s、body 含 script setup(TS)、template、style 及精准光标占位符($1 组件名、$2 逻辑起始位)的 JSON 配置,保存后在 .vue 文件中输入 v3s + Tab 即可生成结构完整、类型安全的 Vue3 + TS + setup 组件模板。

VSCode 里生成代码模板,最稳、最可控、最不依赖第三方插件的方式,就是用内置的 user snippets。它不联网、不调模型、不卡顿,改完立刻生效,适合 Vue3+TS、React、Lit 等任何项目结构。
如何快速创建一个 Vue3 + TS + setup 组件片段
别去搜“Vue 模板插件”,直接配 snippet 最干净。关键不是写多全,而是占位符位置要准,否则光标跳错行、变量名漏替换,反而拖慢节奏。
- 打开命令面板:
Ctrl+Shift+P(Win/Linux)或Cmd+Shift+P(Mac),输入Configure User Snippets - 选择
vue.json(如果没这个文件,选“新建代码片段文件”,输入vue) - 粘贴以下内容(注意:
$1是组件名占位,$2是逻辑起始光标位):
{
"Vue3 Setup Component": {
"prefix": "v3s",
"body": [
"<script setup lang=\"ts\">",
"import { ref, defineProps, defineEmits } from 'vue'",
"",
"const props = defineProps<{ msg?: string }>()",
"const emit = defineEmits<{ (e: 'click'): void }>()",
"",
"const count = ref(0)",
"$2",
"</script>",
"",
"<template>",
" <div>",
" {{ props.msg }}",
" <button @click=\"$1++\">count is {{ $1 }}</button>",
" </div>",
"</template>",
"",
"<style scoped>",
"</style>"
],
"description": "Vue3 + TS + setup template"
}
}
保存后,在 .vue 文件里输入 v3s + Tab,就能生成带类型定义和响应式基础的结构。注意:别把 defineProps 类型写死成 any,否则 TS 检查就废了。
prefix 冲突和语言作用域问题
很多人配完发现不触发,大概率是 prefix 被其他插件劫持,或者当前文件没被识别为对应语言。
- 检查右下角状态栏:确认当前文件语言模式是
Vue(不是HTML或Plain Text)。点一下切换,或按Ctrl+K M手动设 - 避免通用前缀如
comp、vue——它们容易和 Volar/Vetur 的内置片段冲突。推荐用带数字或缩写的前缀,比如v3s、tsfc - 全局片段(
snippets.json)对所有语言生效,但无法读取语言特有变量(如$TM_FILENAME_BASE在vue.json里才可靠)
TSX/React 场景下怎么让 props 类型自动匹配文件名
React 函数组件常需要基于文件名推导接口名,比如 Button.tsx → ButtonProps。靠手动输太慢,得用 VSCode 内置变量 + 小技巧。
- 在
typescriptreact.json中配置,用$TM_FILENAME_BASE获取文件名(不含扩展),再用${TM_FILENAME_BASE/(.*)/${1:/pascal}/}转驼峰 - 示例 body 片段第一行:
interface ${TM_FILENAME_BASE/(.*)/${1:/pascal}/}Props { - 注意:正则替换只在
body字符串中生效,不能用在prefix或description里 - 如果项目用
React.FC,别硬套泛型——TSX 里直接写const Component = (props: Props) => {更清晰,也避开了FC的隐式 children 类型污染
真正麻烦的不是写 snippet,而是当团队多人共用时,body 里混用单双引号、缩进空格数不一致、类型定义漏泛型——这些细节不会报错,但会悄悄破坏类型安全和协作体验。建议把常用 snippet 提到项目级 .vscode/snippets/ 目录下,用 git 跟踪,而不是只存在个人用户配置里。



















