Wrong TypeScript type used for fields when name collision exists between imported and nested messages
Los mantenedores suelen responder en 1 día
Nadie ha tomado este issue todavía.
Evaluación
- Dificultad
- 3/5
- Tiempo estimado
- 1-2 días
- Aptitud para principiantes
- 45/100
- Tipo de issue
- Error
- Claridad
- Bien especificado
- Estado de actividad
- Estancado
- Stack tecnológico
- node.js, typescript
- Área
- tooling
Línea de trabajo
Comienza ejecutando el comando proto-loader-gen-types reportado con common.proto y service.proto; después, inspecciona el example/Service.ts generado. Sigue cómo el generador resuelve Resource cuando el mensaje anidado tiene el mismo nombre y verifica que el campo generado use el tipo importado e incluya su importación.
Escrito por el modelo de indexación a partir del texto del issue.
Descripción
Problem description
proto-loader-gen-types fails to disambiguate between imported top-level types and nested messages with the same name. When this collision occurs, it incorrectly uses the nested type, omits the required import, and generates types that don't match the protobuf structure. This causes type errors and breaks IDE autocomplete for affected fields.
Reproduction steps
Command:
npx proto-loader-gen-types --longs=String --enums=String --defaults --oneofs -I . --outDir=. common.proto service.proto
common.proto:
syntax = "proto3";
package example;
message Resource {
int64 id = 1;
string name = 2;
}
service.proto:
syntax = "proto3";
package example;
import "common.proto";
message Service {
Resource resource = 1; // Should reference Resource from common.proto
message Status {
message Metric {
message Resource { // Name collision
string name = 1;
int32 value = 2;
}
}
}
}
Expected:
// example/Service.ts
import type { Resource as _example_Resource } from './Resource';
export interface Service {
resource?: _example_Resource | null; // Uses imported type
}
Actual:
// example/Service.ts
// Missing import for Resource
export interface Service {
resource?: _example_Service_Status_Metric_Resource | null; // Uses wrong nested type
}
Workaround - Manually add the import and fix the type:
import type { Resource as _example_Resource } from './Resource';
export interface Service {
resource?: _example_Resource | null; // Fixed
}
Environment
Reproduced with @grpc/[email protected] and @grpc/[email protected] on Ubuntu 22.04 on WSL2 (x86_64) with multiple 16+ Node versions. Node is installed using nvm
Additional context
Python and Go generators seem to handle this correctly:
# Python (protoc)
from example import common_pb2 as _common_pb2
class Service(_message.Message):
resource: _common_pb2.Resource # Correct
// Go (protoc-gen-go)
type Service struct {
Resource *Resource // Correct
}
// TypeScript (proto-loader-gen-types)
resource?: _example_Service_Status_Metric_Resource | null; // Wrong
- Lenguaje dominante
- TypeScript
- Estrellas
- 4.8k
- Forks
- 716
- Merge medio
- 2 d 3 h
- PR fusionados (30 d)
- 10
Preparar el entorno
Primeros pasos
- Lee el issue completo y luego la guía de contribución del proyecto.
- Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
- Haz un fork del repositorio y trabaja en una rama.
- Abre un pull request que haga referencia al número del issue.
Más de grpc/grpc-node
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 82/100
Los mantenedores suelen responder en 1 día
-
package: @grpc/grpc-js
Dificultad 2/5 1-3 horas Aptitud para principiantes 62/100
grpc/grpc-node#2993 · 3 comentarios · 4 reacciones ·
Los mantenedores suelen responder en 1 día
-
Dificultad 3/5 1-2 días Aptitud para principiantes 65/100
grpc/grpc-node#3091 · 1 reacción ·
Los mantenedores suelen responder en 1 día
-
feature request
Dificultad 3/5 1-2 días Aptitud para principiantes 68/100
grpc/grpc-node#3077 · 1 comentario ·
Los mantenedores suelen responder en 1 día
-
Dificultad 3/5 1-2 días Aptitud para principiantes 76/100
grpc/grpc-node#3068 · 2 comentarios · 1 reacción ·
Los mantenedores suelen responder en 1 día
Todos los issues de grpc/grpc-node
Issues similares
-
bug
Dificultad 1/5 Menos de una hora Aptitud para principiantes 88/100
StabilityNexus/Fate-EVM-Frontend#153 ·
Los mantenedores suelen responder en 1 día
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 78/100
code-yeongyu/oh-my-openagent#9039 ·
Los mantenedores suelen responder en 1 día
-
bug
Dificultad 2/5 1-3 horas Aptitud para principiantes 84/100
Tencent/teamai-cli#862 ·
Los mantenedores suelen responder en 1 día
-
bug good first issue hacktoberfest redis
Dificultad 2/5 1-3 horas Aptitud para principiantes 88/100
libredb/libredb-studio#1164 ·
Los mantenedores suelen responder en 1 día
-
flake
Dificultad 2/5 1-3 horas Aptitud para principiantes 85/100
coder/xum#4920 · 2 comentarios ·
Los mantenedores suelen responder en 1 día