编写应用版本迁移脚本时如何在VSCode中展开并复制完整类型结构?
快速获取VSCode中展开的完整TS类型(编写跨版本状态迁移脚本适用)
零插件实操方法
- 悬停弹窗强制展开:等类型提示弹窗弹出来之后,按住
Ctrl(macOS按住Cmd),原本只显示类型引用名(比如app: AppShape)的折叠内容会自动全部展开成内联结构,直接鼠标选中弹窗里的所有文本复制,就能拿到带所有字段细节的类型定义。 - 用TS工具类型批量生成无别名的完整结构:遇到多层嵌套引用的类型,逐层点展开太麻烦,直接在迁移脚本文件顶部写临时的辅助类型,强制TS把所有嵌套的类型引用拍平:
// 临时写的辅助代码,复制完类型就能删掉 type Expand<T> = T extends infer O ? { [K in keyof O]: O[K] } : never; // 替换成你项目里实际的V1 Store、V2 State类型名 type _临时V1 = Expand<项目里V1版本Store的实际类型>; type _临时V2 = Expand<项目里V2版本State的实际类型>;
把鼠标悬停在这两个临时类型上,VSCode展示的就是完全拍平、没有任何类型别名跳转的完整结构,直接复制提示内容就能用,不用自己拼嵌套字段。
常见问题排查
如果按住快捷键还是展不开嵌套类型,做两步调整就行:
- 打开VSCode设置,搜索
typescript.tsserver.maxTsServerMemory,把内存值调到至少4096- 按
Ctrl+Shift+P(macOS按Cmd+Shift+P)打开命令面板,执行TypeScript: Restart TS Server重启TS语言服务,展开功能就正常了。
最终迁移脚本结构
把复制来的展开内容替换掉占位的any,就可以写出你预期的可直接用的迁移脚本:
// 粘贴从临时类型复制来的完整展开结构 type StateVersion1 = { // 比如展开得到的 app: { banner: string; ... } 这类内联字段 }; type StateVersion2 = { // 对应V2状态的完整结构 }; function migrateToVersion2(state: StateVersion1): StateVersion2 { // 写跨版本迁移逻辑 }
内容的提问来源于stack exchange,提问作者Noitidart
相关产品推荐
相关产品推荐

