Wrong TypeScript type used for fields when name collision exists between imported and nested messages
I maintainer di solito rispondono entro 2 giorni
Nessuno ha ancora preso questa issue.
Valutazione
- Difficoltà
- 3/5
- Tempo stimato
- 1-2 giorni
- Idoneità per principianti
- 45/100
- Tipo di issue
- Bug
- Chiarezza
- Specificata chiaramente
- Stato di attività
- Ferma
- Stack tecnologico
- node.js, typescript
- Ambito
- tooling
Direzione di ricerca
Inizia eseguendo il comando proto-loader-gen-types segnalato con common.proto e service.proto, quindi esamina il example/Service.ts generato. Segui il modo in cui il generatore risolve Resource quando il messaggio annidato ha lo stesso nome e verifica che il campo generato utilizzi il tipo importato e includa il relativo import.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Descrizione
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
- Lingua principale
- TypeScript
- Stelle
- 4.8k
- Fork
- 716
- Merge medio
- 1g 18h
- PR unite (30g)
- 17
Preparare l'ambiente
Come iniziare
- Leggi tutta la issue e poi la guida ai contributi del progetto.
- Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
- Fai un fork del repository e lavora su un branch.
- Apri una pull request che faccia riferimento al numero della issue.
Altre issue di grpc/grpc-node
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 82/100
I maintainer di solito rispondono entro 2 giorni
-
package: @grpc/grpc-js
Difficoltà 2/5 1-3 ore Idoneità per principianti 62/100
grpc/grpc-node#2993 · 3 commenti · 4 reazioni ·
I maintainer di solito rispondono entro 2 giorni
-
Difficoltà 3/5 1-2 giorni Idoneità per principianti 65/100
grpc/grpc-node#3091 · 1 reazione ·
I maintainer di solito rispondono entro 2 giorni
-
feature request
Difficoltà 3/5 1-2 giorni Idoneità per principianti 68/100
grpc/grpc-node#3077 · 1 commento ·
I maintainer di solito rispondono entro 2 giorni
-
Difficoltà 3/5 1-2 giorni Idoneità per principianti 76/100
grpc/grpc-node#3068 · 2 commenti · 1 reazione ·
I maintainer di solito rispondono entro 2 giorni
Tutte le issue di grpc/grpc-node
Issue simili
-
Difficoltà 1/5 1-3 ore Idoneità per principianti 88/100
supabase/agent-skills#611 ·
-
Difficoltà 1/5 Meno di un'ora Idoneità per principianti 68/100
polka-codes/test#345 ·
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 1/5 1-3 ore Idoneità per principianti 92/100
GoogleChromeLabs/project-sesame#217 ·
I maintainer di solito rispondono entro 12 giorni
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 74/100
solana-foundation/solana-com#2202 ·
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 85/100