Skip to content
| Marketplace
Sign in
Visual Studio Code>Programming Languages>Proto UtilsNew to Visual Studio Code? Get it now.
Proto Utils

Proto Utils

paulgui

|
1 install
| (0) | Free
Proto3 syntax highlighting, go-to-definition, and TypeScript code generation
Installation
Launch VS Code Quick Open (Ctrl+P), paste the following command, and press enter.
Copied to clipboard
More Info

Proto Utils

面向 VS Code 的 Proto3 插件,提供语法高亮、跳转到定义和 TypeScript 类型生成。插件内置 Proto3 解析器,无需安装 protoc、buf 或其他命令行工具。

功能

  • 为 .proto 文件提供 Proto3 语法高亮
  • 区分内置标量类型和自定义类型
  • 支持同文件、导入文件和 package 命名空间中的类型定义跳转
  • 将 message、enum、repeated、map 和 oneof 生成为 TypeScript 类型
  • 根据多个 .proto 文件之间的类型引用生成 TypeScript import type

基本使用

编辑和跳转

在工作区中打开 .proto 文件后,插件会自动激活并索引工作区内的 Proto3 文件。

  • 语法高亮会自动生效。
  • 按住 Ctrl 并点击类型名称,可跳转到对应的 message 或 enum 定义。
  • macOS 使用 Cmd + 点击。

跨文件跳转需要目标类型所在的文件位于当前 VS Code 工作区中,并通过 Proto import 或 package 名称可解析。

生成 TypeScript 类型

可以通过以下任一方式生成类型:

  1. 在编辑器或资源管理器中右键点击 .proto 文件,然后选择 Proto Utils: Generate TypeScript Types。
  2. 打开命令面板,运行 Proto Utils: Generate TypeScript Types。使用命令面板时,应先打开目标 .proto 文件。

默认情况下,生成文件写入工作区的 generated/ 目录。若 Proto 文件包含:

syntax = "proto3";

package account.profile;

message User {
  string user_name = 1;
  repeated string roles = 2;
}

默认输出路径为:

generated/account/profile.ts

生成内容类似:

// Generated by proto-utils. Do not edit.

export interface User {
  userName: string;
  roles: string[];
}

每次执行生成命令都会覆盖对应的输出文件,请勿手动修改生成文件。

配置

在 VS Code 设置中搜索 Proto Utils,或在工作区的 .vscode/settings.json 中配置 protoUtils.codeGen.*。

配置项 类型与可选值 默认值 作用
protoUtils.codeGen.outputDir string "generated" 输出目录,相对于工作区根目录
protoUtils.codeGen.enumStyle "enum" | "union" "enum" 将 Proto enum 生成为 TypeScript enum 或字符串字面量联合类型
protoUtils.codeGen.optionalMessageFields boolean true 是否为非 repeated 的 message 类型字段添加 ?
protoUtils.codeGen.optionalScalarFields boolean false 是否为标量字段添加 ?
protoUtils.codeGen.fieldNaming "camelCase" | "preserve" "camelCase" 将字段名转换为 camelCase,或保留 Proto 原始名称
protoUtils.codeGen.pathMapping "package" | "file" "package" 根据 Proto package 或源文件相对路径确定输出路径
protoUtils.codeGen.oneofStyle "optional" | "union" "optional" 将 oneof 生成为可选字段或互斥联合类型

示例配置:

{
  "protoUtils.codeGen.outputDir": "src/generated",
  "protoUtils.codeGen.enumStyle": "union",
  "protoUtils.codeGen.optionalMessageFields": true,
  "protoUtils.codeGen.optionalScalarFields": false,
  "protoUtils.codeGen.fieldNaming": "camelCase",
  "protoUtils.codeGen.pathMapping": "package",
  "protoUtils.codeGen.oneofStyle": "union"
}

输出路径映射

使用 "package" 时,插件优先根据 package 生成路径:

package my.service;

对应:

<outputDir>/my/service.ts

如果文件没有 package,则回退到源文件相对于工作区根目录的路径。

使用 "file" 时,插件保留源文件相对于工作区根目录的路径,并将 .proto 替换为 .ts。例如:

protos/account/user.proto

对应:

<outputDir>/protos/account/user.ts

类型映射

Proto3 类型 TypeScript 类型
double、float number
各种 32/64 位整数类型 number
bool boolean
string string
bytes Uint8Array
repeated T T[]
map<K, V> Record<K, V>
message interface
enum enum 或字符串字面量联合类型
  • Contact us
  • Jobs
  • Privacy
  • Manage cookies
  • Terms of use
  • Trademarks
© 2026 Microsoft