如何为 Protobuf 生成的 JavaScript 文件设置 VSCode 智能感知?

Hid*_*ork 5 javascript protocol-buffers visual-studio-code

通常,我的 VSCode 安装会在我的 Javascript 项目中提供智能感知提示。但是,我在让 VSCode 显示/注册从另一个 JavaScript 文件导入的消息类型的智能感知时遇到问题,该文件是通过 protocol buffer 编译器生成的protoc

下面是我面临的问题的屏幕截图。根据下面添加的 protobuf 文件,我期望该对象具有setId(), setName(),函数。但是,VSCode 似乎无法识别该类型。setSalary()jeffSchema.Employee

VSCode 不提供智能感知

我可以做些什么来让智能感知处理从协议缓冲区生成的类型吗?

reprex使用 VSCode 1.50.1 和 protoc 版本进行测试libprotoc 3.13.0

我使用编译了以下 protobuf 文件

protoc --js_out=import_style=commonjs,binary:. employees.proto
Run Code Online (Sandbox Code Playgroud)

这会产生employees_pb.js

员工.proto

protoc --js_out=import_style=commonjs,binary:. employees.proto
Run Code Online (Sandbox Code Playgroud)

索引.js:

syntax = "proto3";

option optimize_for = SPEED;

message Employee {
    int32 id = 1;
    string name = 2;
    float salary = 3;
}

message Employees {
    repeated Employee employees = 1;
} 
Run Code Online (Sandbox Code Playgroud)

包.json:

// import schema from compiled file
const Schema = require("./employees_pb");

//create a new instance of Employee
const jeff = new Schema.Employee();
jeff.setId(1001); // <-- Intellisense does not work here.
jeff.setName("Jeff");
jeff.setSalary(1001);
Run Code Online (Sandbox Code Playgroud)

小智 3

在您的employees_pb文件中,您可以更改最后一行以获得完整的智能感知:

module.exports = {...goog, ...proto};
// goog.object.extend(exports, proto);
Run Code Online (Sandbox Code Playgroud)

由于某种原因,导出扩展不起作用?我就这个话题打开了这个问题。