0

我是 ts 的新手。我正在与巢一起工作。我正在尝试使用我用 js 编写的 grpc-client 。但是当我尝试导出我的 grpc 服务对象时,我收到了这个错误:

import {loadPackageDefinition,credentials} from '@grpc/grpc-js';
import {loadSync} from '@grpc/proto-loader';

const packageDefinition = loadSync(`${__dirname}/protos/main.proto`, {
    keepCase: true,
    longs: String,
    enums: String,
    defaults: true,
    oneofs: true,
    arrays: true
});


let { AuthService } = loadPackageDefinition(packageDefinition) ;

 export const auth_client = new AuthService(`localhost:${process.env.auth_grpc_port?process.env.auth_grpc_port:30030}`,credentials.createInsecure());

错误 :

src/lib/grpc.client.ts:16:34 - 错误 TS2351:此表达式不可构造。并非所有类型为 'GrpcObject | 服务客户端构造器 | ProtobufTypeDefinition' 是可构造的。类型“GrpcObject”没有构造签名。

4

1 回答 1

1

不幸的是,对象输出的 TypeScript 类型loadPackageDefinition过于通用,无法有效地使用。一种解决方案是使用随@grpc/proto-loader版本 0.6.x 分发的 TypeScript 生成器为您的 proto 文件生成 TypeScript 类型。然后,您可以使用类型断言使输出loadPackageDefinition具有反映您的 proto 文件的特定结构。

于 2021-04-22T17:28:33.893 回答