
Product
Socket for Jira Is Now Available
Socket for Jira lets teams turn alerts into Jira tickets with manual creation, automated ticketing rules, and two-way sync.
grpc-tools-ts
Advanced tools
Generate d.ts definitions for generated js files from grpc_tools_node_protoc
Generate corresponding TypeScript d.ts codes according to js codes generated by grpc_tools_node_protoc
More information about grpc_tools_node_protoc:
Fix definition changes according to the version change of grpc official TypeScript definition, see: index.d.ts@1.9.0.
Detailed changes could be found here: PR#14.
Since v2.x.x, current project supports the official definition of grpc, see: index.d.ts@1.8.4.
Though the usage of tool, and generated codes shall not been changed, it's good to be double checked in your project when upgrade.
TSLint has been disabled in generated files. Please see the conversation: #13.
This tools is using an unofficial grpc.d.ts definition, see: grpc-tsd.
If you want to use this tool, you have to use definition mentioned.
npm install grpc_tools_node_protoc_ts --save-dev
# generate js codes via grpc-tools
grpc_tools_node_protoc \
--js_out=import_style=commonjs,binary:./your_dest_dir \
--grpc_out=./your_dest_dir \
--plugin=protoc-gen-grpc=`which grpc_tools_node_protoc_plugin` \
-I ./proto \
./your_proto_dir/*.proto
# generate d.ts codes
protoc \
--plugin=protoc-gen-ts=./node_modules/.bin/protoc-gen-ts \
--ts_out=./your_dest_dir \
-I ./proto \
./your_proto_dir/*.proto
There is a complete & runnable sample in folder examples.
Dirs:
syntax = "proto3";
package com.book;
message Book {
int64 isbn = 1;
string title = 2;
string author = 3;
}
message GetBookRequest {
int64 isbn = 1;
}
message GetBookViaAuthor {
string author = 1;
}
service BookService {
rpc GetBook (GetBookRequest) returns (Book) {}
rpc GetBooksViaAuthor (GetBookViaAuthor) returns (stream Book) {}
rpc GetGreatestBook (stream GetBookRequest) returns (Book) {}
rpc GetBooks (stream GetBookRequest) returns (stream Book) {}
}
message BookStore {
string name = 1;
map<int64, string> books = 2;
}
enum EnumSample {
option allow_alias = true;
UNKNOWN = 0;
STARTED = 1;
RUNNING = 1;
}
// Message with reserved keywords
// see: https://github.com/google/protobuf/blob/cc3fa2ec80d196e045ae05797799f079188106f3/js/compatibility_tests/v3.0.0/test.proto#L66-L72
message SpecialCases {
string normal = 1;
// Examples of Js reserved names that are converted to pb_<name>.
string default = 2;
string function = 3;
string var = 4;
}
// package: com.book
// file: book.proto
/* tslint:disable */
import * as jspb from "google-protobuf";
export class Book extends jspb.Message {
getIsbn(): number;
setIsbn(value: number): void;
getTitle(): string;
setTitle(value: string): void;
getAuthor(): string;
setAuthor(value: string): void;
serializeBinary(): Uint8Array;
toObject(includeInstance?: boolean): Book.AsObject;
static toObject(includeInstance: boolean, msg: Book): Book.AsObject;
static extensions: {[key: number]: jspb.ExtensionFieldInfo<jspb.Message>};
static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo<jspb.Message>};
static serializeBinaryToWriter(message: Book, writer: jspb.BinaryWriter): void;
static deserializeBinary(bytes: Uint8Array): Book;
static deserializeBinaryFromReader(message: Book, reader: jspb.BinaryReader): Book;
}
export namespace Book {
export type AsObject = {
isbn: number,
title: string,
author: string,
}
}
export class GetBookRequest extends jspb.Message {
getIsbn(): number;
setIsbn(value: number): void;
serializeBinary(): Uint8Array;
toObject(includeInstance?: boolean): GetBookRequest.AsObject;
static toObject(includeInstance: boolean, msg: GetBookRequest): GetBookRequest.AsObject;
static extensions: {[key: number]: jspb.ExtensionFieldInfo<jspb.Message>};
static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo<jspb.Message>};
static serializeBinaryToWriter(message: GetBookRequest, writer: jspb.BinaryWriter): void;
static deserializeBinary(bytes: Uint8Array): GetBookRequest;
static deserializeBinaryFromReader(message: GetBookRequest, reader: jspb.BinaryReader): GetBookRequest;
}
export namespace GetBookRequest {
export type AsObject = {
isbn: number,
}
}
export class GetBookViaAuthor extends jspb.Message {
getAuthor(): string;
setAuthor(value: string): void;
serializeBinary(): Uint8Array;
toObject(includeInstance?: boolean): GetBookViaAuthor.AsObject;
static toObject(includeInstance: boolean, msg: GetBookViaAuthor): GetBookViaAuthor.AsObject;
static extensions: {[key: number]: jspb.ExtensionFieldInfo<jspb.Message>};
static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo<jspb.Message>};
static serializeBinaryToWriter(message: GetBookViaAuthor, writer: jspb.BinaryWriter): void;
static deserializeBinary(bytes: Uint8Array): GetBookViaAuthor;
static deserializeBinaryFromReader(message: GetBookViaAuthor, reader: jspb.BinaryReader): GetBookViaAuthor;
}
export namespace GetBookViaAuthor {
export type AsObject = {
author: string,
}
}
export class BookStore extends jspb.Message {
getName(): string;
setName(value: string): void;
getBooksMap(): jspb.Map<number, string>;
clearBooksMap(): void;
serializeBinary(): Uint8Array;
toObject(includeInstance?: boolean): BookStore.AsObject;
static toObject(includeInstance: boolean, msg: BookStore): BookStore.AsObject;
static extensions: {[key: number]: jspb.ExtensionFieldInfo<jspb.Message>};
static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo<jspb.Message>};
static serializeBinaryToWriter(message: BookStore, writer: jspb.BinaryWriter): void;
static deserializeBinary(bytes: Uint8Array): BookStore;
static deserializeBinaryFromReader(message: BookStore, reader: jspb.BinaryReader): BookStore;
}
export namespace BookStore {
export type AsObject = {
name: string,
booksMap: Array<[number, string]>,
}
}
export class SpecialCases extends jspb.Message {
getNormal(): string;
setNormal(value: string): void;
getDefault(): string;
setDefault(value: string): void;
getFunction(): string;
setFunction(value: string): void;
getVar(): string;
setVar(value: string): void;
serializeBinary(): Uint8Array;
toObject(includeInstance?: boolean): SpecialCases.AsObject;
static toObject(includeInstance: boolean, msg: SpecialCases): SpecialCases.AsObject;
static extensions: {[key: number]: jspb.ExtensionFieldInfo<jspb.Message>};
static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo<jspb.Message>};
static serializeBinaryToWriter(message: SpecialCases, writer: jspb.BinaryWriter): void;
static deserializeBinary(bytes: Uint8Array): SpecialCases;
static deserializeBinaryFromReader(message: SpecialCases, reader: jspb.BinaryReader): SpecialCases;
}
export namespace SpecialCases {
export type AsObject = {
normal: string,
pb_default: string,
pb_function: string,
pb_var: string,
}
}
export enum EnumSample {
UNKNOWN = 0,
STARTED = 1,
RUNNING = 1,
}
// package: com.book
// file: book.proto
/* tslint:disable */
import * as grpc from "grpc";
import * as book_pb from "./book_pb";
interface IBookServiceService extends grpc.ServiceDefinition<grpc.UntypedServiceImplementation> {
getBook: IBookServiceService_IGetBook;
getBooksViaAuthor: IBookServiceService_IGetBooksViaAuthor;
getGreatestBook: IBookServiceService_IGetGreatestBook;
getBooks: IBookServiceService_IGetBooks;
}
interface IBookServiceService_IGetBook extends grpc.MethodDefinition<book_pb.GetBookRequest, book_pb.Book> {
path: string; // "/com.book.BookService/GetBook"
requestStream: boolean; // false
responseStream: boolean; // false
requestSerialize: grpc.serialize<book_pb.GetBookRequest>;
requestDeserialize: grpc.deserialize<book_pb.GetBookRequest>;
responseSerialize: grpc.serialize<book_pb.Book>;
responseDeserialize: grpc.deserialize<book_pb.Book>;
}
interface IBookServiceService_IGetBooksViaAuthor extends grpc.MethodDefinition<book_pb.GetBookViaAuthor, book_pb.Book> {
path: string; // "/com.book.BookService/GetBooksViaAuthor"
requestStream: boolean; // false
responseStream: boolean; // true
requestSerialize: grpc.serialize<book_pb.GetBookViaAuthor>;
requestDeserialize: grpc.deserialize<book_pb.GetBookViaAuthor>;
responseSerialize: grpc.serialize<book_pb.Book>;
responseDeserialize: grpc.deserialize<book_pb.Book>;
}
interface IBookServiceService_IGetGreatestBook extends grpc.MethodDefinition<book_pb.GetBookRequest, book_pb.Book> {
path: string; // "/com.book.BookService/GetGreatestBook"
requestStream: boolean; // true
responseStream: boolean; // false
requestSerialize: grpc.serialize<book_pb.GetBookRequest>;
requestDeserialize: grpc.deserialize<book_pb.GetBookRequest>;
responseSerialize: grpc.serialize<book_pb.Book>;
responseDeserialize: grpc.deserialize<book_pb.Book>;
}
interface IBookServiceService_IGetBooks extends grpc.MethodDefinition<book_pb.GetBookRequest, book_pb.Book> {
path: string; // "/com.book.BookService/GetBooks"
requestStream: boolean; // true
responseStream: boolean; // true
requestSerialize: grpc.serialize<book_pb.GetBookRequest>;
requestDeserialize: grpc.deserialize<book_pb.GetBookRequest>;
responseSerialize: grpc.serialize<book_pb.Book>;
responseDeserialize: grpc.deserialize<book_pb.Book>;
}
export const BookServiceService: IBookServiceService;
export interface IBookServiceServer {
getBook: grpc.handleUnaryCall<book_pb.GetBookRequest, book_pb.Book>;
getBooksViaAuthor: grpc.handleServerStreamingCall<book_pb.GetBookViaAuthor, book_pb.Book>;
getGreatestBook: grpc.handleClientStreamingCall<book_pb.GetBookRequest, book_pb.Book>;
getBooks: grpc.handleBidiStreamingCall<book_pb.GetBookRequest, book_pb.Book>;
}
export interface IBookServiceClient {
getBook(request: book_pb.GetBookRequest, callback: (error: Error | null, response: book_pb.Book) => void): grpc.ClientUnaryCall;
getBook(request: book_pb.GetBookRequest, metadata: grpc.Metadata, callback: (error: Error | null, response: book_pb.Book) => void): grpc.ClientUnaryCall;
getBook(request: book_pb.GetBookRequest, metadata: grpc.Metadata, options: Partial<grpc.CallOptions>, callback: (error: Error | null, response: book_pb.Book) => void): grpc.ClientUnaryCall;
getBooksViaAuthor(request: book_pb.GetBookViaAuthor, options?: Partial<grpc.CallOptions>): grpc.ClientReadableStream<book_pb.GetBookViaAuthor>;
getBooksViaAuthor(request: book_pb.GetBookViaAuthor, metadata?: grpc.Metadata, options?: Partial<grpc.CallOptions>): grpc.ClientReadableStream<book_pb.GetBookViaAuthor>;
getGreatestBook(callback: (error: Error | null, response: book_pb.Book) => void): grpc.ClientWritableStream<book_pb.GetBookRequest>;
getGreatestBook(metadata: grpc.Metadata, callback: (error: Error | null, response: book_pb.Book) => void): grpc.ClientWritableStream<book_pb.GetBookRequest>;
getGreatestBook(options: Partial<grpc.CallOptions>, callback: (error: Error | null, response: book_pb.Book) => void): grpc.ClientWritableStream<book_pb.GetBookRequest>;
getGreatestBook(metadata: grpc.Metadata, options: Partial<grpc.CallOptions>, callback: (error: Error | null, response: book_pb.Book) => void): grpc.ClientWritableStream<book_pb.GetBookRequest>;
getBooks(): grpc.ClientDuplexStream<book_pb.GetBookRequest, book_pb.Book>;
getBooks(options: Partial<grpc.CallOptions>): grpc.ClientDuplexStream<book_pb.GetBookRequest, book_pb.Book>;
getBooks(metadata: grpc.Metadata, options?: Partial<grpc.CallOptions>): grpc.ClientDuplexStream<book_pb.GetBookRequest, book_pb.Book>;
}
export class BookServiceClient extends grpc.Client implements IBookServiceClient {
constructor(address: string, credentials: grpc.ChannelCredentials, options?: object);
public getBook(request: book_pb.GetBookRequest, callback: (error: Error | null, response: book_pb.Book) => void): grpc.ClientUnaryCall;
public getBook(request: book_pb.GetBookRequest, metadata: grpc.Metadata, callback: (error: Error | null, response: book_pb.Book) => void): grpc.ClientUnaryCall;
public getBook(request: book_pb.GetBookRequest, metadata: grpc.Metadata, options: Partial<grpc.CallOptions>, callback: (error: Error | null, response: book_pb.Book) => void): grpc.ClientUnaryCall;
public getBooksViaAuthor(request: book_pb.GetBookViaAuthor, options?: Partial<grpc.CallOptions>): grpc.ClientReadableStream<book_pb.GetBookViaAuthor>;
public getBooksViaAuthor(request: book_pb.GetBookViaAuthor, metadata?: grpc.Metadata, options?: Partial<grpc.CallOptions>): grpc.ClientReadableStream<book_pb.GetBookViaAuthor>;
public getGreatestBook(callback: (error: Error | null, response: book_pb.Book) => void): grpc.ClientWritableStream<book_pb.GetBookRequest>;
public getGreatestBook(metadata: grpc.Metadata, callback: (error: Error | null, response: book_pb.Book) => void): grpc.ClientWritableStream<book_pb.GetBookRequest>;
public getGreatestBook(options: Partial<grpc.CallOptions>, callback: (error: Error | null, response: book_pb.Book) => void): grpc.ClientWritableStream<book_pb.GetBookRequest>;
public getGreatestBook(metadata: grpc.Metadata, options: Partial<grpc.CallOptions>, callback: (error: Error | null, response: book_pb.Book) => void): grpc.ClientWritableStream<book_pb.GetBookRequest>;
public getBooks(options?: Partial<grpc.CallOptions>): grpc.ClientDuplexStream<book_pb.GetBookRequest, book_pb.Book>;
public getBooks(metadata?: grpc.Metadata, options?: Partial<grpc.CallOptions>): grpc.ClientDuplexStream<book_pb.GetBookRequest, book_pb.Book>;
}
Add a new server implementation interface signature, with this the server implementation could be verified. See: Issue#22. And please also check the new example using this new feature: link.
Fix issue of reversed JavaScript keyword code generation. See: Issue#20 & PR#21.
Fix issue of conflicted I{$MethodName} name, see: Issue#19.
Fix definitions. fix: add missing argument grpc.Client~CallOptions for requests
# npm install grpc@1.9.0 --save
node --version
# v8.4.0
npm --version
# 5.2.0
protoc --version
# libprotoc 3.3.0
grpc_tools_node_protoc --version
# libprotoc 3.4.0
npm list -g --depth=0 | grep grpc-tools
# grpc-tools@1.6.6
FAQs
Generate d.ts definitions for generated js files from grpc_tools_node_protoc
The npm package grpc-tools-ts receives a total of 4 weekly downloads. As such, grpc-tools-ts popularity was classified as not popular.
We found that grpc-tools-ts demonstrated a not healthy version release cadence and project activity because the last version was released a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Product
Socket for Jira lets teams turn alerts into Jira tickets with manual creation, automated ticketing rules, and two-way sync.

Company News
Socket won two 2026 Reppy Awards from RepVue, ranking in the top 5% of all sales orgs. AE Alexandra Lister shares what it's like to grow a sales career here.

Security News
NIST will stop enriching most CVEs under a new risk-based model, narrowing the NVD's scope as vulnerability submissions continue to surge.