[BUG][typescript-fetch] Nested oneOf: parent imports instanceOf<Member> that is never emitted (TS2724/TS2305)
I maintainer di solito rispondono entro 1 giorno
@Utkarsh-rwt ci sta già lavorando.
Dal 16/10/2026.
Valutazione
- Difficoltà
- 4/5
- Tempo stimato
- 3-5 giorni
- Idoneità per principianti
- 35/100
- Tipo di issue
- Bug
- Chiarezza
- Abbastanza chiara
- Stato di attività
- Attiva
- Stack tecnologico
- java, openapi, typescript
Direzione di ricerca
The bug sits in the typescript-fetch template modelOneOf.mustache, which imports instanceOf<Member> for each member in oneOfModels even when the member is itself a oneOf. Start by reproducing with the spec in the issue, then compare the generated Parent.ts imports with the instanceOf functions Child.ts actually exports. Done means the generated client type-checks under strict mode, either by emitting instanceOfChild for discriminated oneOf models or by skipping the import when the function is absent.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Descrizione
Bug Report Checklist
- Have you provided a full/minimal spec to reproduce the issue?
- Have you validated the input using an OpenAPI validator?
- Have you tested with the latest master to confirm the issue still exists?
- Have you searched for related issues/PRs?
- What's the actual output vs expected output?
Description
When a oneOf schema has a member that is itself a oneOf (nested discriminated unions), the generated parent model does not compile. modelOneOf.mustache imports instanceOf<Member> for every member in oneOfModels, but for a member that is a oneOf model the generator never emits that function: only modelGeneric (and modelEnum) define instanceOf<Name>.
models/Parent.ts(18,5): error TS2305: Module '"./Child"' has no exported member 'instanceOfChild'.
With a discriminator the imported function is not even used by the parent (FromJSONTyped / ToJSON switch on the discriminator), so the build breaks only because of the import.
Related but different: #14611 (same missing import, with an enum member instead of a oneOf member).
openapi-generator version
Reproduced with v7.12.0, v7.16.0, v7.23.0, v7.26.0 and latest (7.27.0-SNAPSHOT). Not a recent regression as far as we can tell.
OpenAPI declaration file content or url
openapi: 3.0.0
info:
title: nested oneOf
version: 1.0.0
paths: {}
components:
schemas:
Parent:
oneOf:
- $ref: '#/components/schemas/Leaf'
- $ref: '#/components/schemas/Child'
discriminator:
propertyName: type
mapping:
LEAF: '#/components/schemas/Leaf'
CHILD: '#/components/schemas/Child'
Child:
oneOf:
- $ref: '#/components/schemas/ChildA'
- $ref: '#/components/schemas/ChildB'
discriminator:
propertyName: subType
mapping:
A: '#/components/schemas/ChildA'
B: '#/components/schemas/ChildB'
Leaf:
type: object
required: [type]
properties:
type: { type: string, enum: [LEAF] }
ChildA:
type: object
required: [type, subType]
properties:
type: { type: string, enum: [CHILD] }
subType: { type: string, enum: [A] }
ChildB:
type: object
required: [type, subType]
properties:
type: { type: string, enum: [CHILD] }
subType: { type: string, enum: [B] }
Generation Details
docker run --rm -v "$PWD":/x openapitools/openapi-generator-cli:latest generate \
-i /x/spec.yaml -g typescript-fetch -o /x/out
npx -p [email protected] tsc --noEmit --strict --target es2020 --module commonjs \
--moduleResolution node --lib es2020,dom out/models/Parent.ts
Steps to reproduce
- Generate with the spec and command above.
- Type-check
out/models/Parent.ts: TS2305 oninstanceOfChild.
Expected: the client compiles. Actual: Child.ts exports Child, ChildFromJSON, ChildFromJSONTyped, ChildToJSON, ChildToJSONTyped, but no instanceOfChild.
Suggest a fix
Either of these, in typescript-fetch/modelOneOf.mustache:
-
emit
instanceOf{{classname}}foroneOfmodels with a discriminator, dispatching on the discriminator to the members'instanceOffunctions. This is what we use today as a template override, and it works for us:{{#discriminator}} export function instanceOf{{classname}}(value: object): value is {{classname}} { if (!value || typeof value !== 'object' || !('{{discriminator.propertyBaseName}}' in value)) { return false; } switch ((value as any)['{{discriminator.propertyBaseName}}']) { {{#discriminator.mappedModels}} case '{{mappingName}}': return instanceOf{{modelName}}(value); {{/discriminator.mappedModels}} default: return false; } } {{/discriminator}} -
or not import
instanceOf<Member>when it is not used (the discriminator path) or does not exist (member is aoneOf/enum, which would also cover #14611).
- Lingua principale
- Java
- Stelle
- 26.9k
- Fork
- 7.8k
- Merge medio
- 2g 10h
- PR unite (30g)
- 180
Preparare l'ambiente
Avvia il container di sviluppo del progetto nel browser, con il tuo account GitHub.
- Include un Dockerfile o un file Docker Compose
- Ha un modello di pull request
- Leggi la guida per i contributori
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 OpenAPITools/openapi-generator
-
Issue: Bug
Difficoltà 2/5 1-3 ore Idoneità per principianti 80/100
OpenAPITools/openapi-generator#25643 · 1 commento ·
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 82/100
OpenAPITools/openapi-generator#25640 ·
I maintainer di solito rispondono entro 1 giorno
-
[BUG][JAVA] Deprecated properties only get @Deprecated on the getter (base, feign, native, microprofile)Forse già presa @Inf1mum l’ha presa 2 giorni fa. ApertaIssue: Bug
Difficoltà 2/5 1-3 ore Idoneità per principianti 82/100
OpenAPITools/openapi-generator#25567 ·
I maintainer di solito rispondono entro 1 giorno
-
[BUG][KOTLIN-SERVER] typeInfoAnnotation.mustache uses As.PROPERTY → discriminator property serialized twiceForse già presa @Inf1mum l’ha presa 9 giorni fa. ApertaIssue: Bug
Difficoltà 2/5 1-3 ore Idoneità per principianti 62/100
OpenAPITools/openapi-generator#25524 · 1 commento ·
I maintainer di solito rispondono entro 1 giorno
-
[REQ][JAVA][resteasy] Support for Jackson 3 / useJackson3Forse già presa Una pull request collegata a questa issue è aperta o già unita. ApertaEnhancement: Feature
Difficoltà 2/5 1-3 ore Idoneità per principianti 78/100
OpenAPITools/openapi-generator#25364 ·
I maintainer di solito rispondono entro 1 giorno
Tutte le issue di OpenAPITools/openapi-generator
Issue simili
-
bug emitter:client:csharp
Difficoltà 2/5 1-3 ore Idoneità per principianti 84/100
microsoft/typespec#12572 · 1 commento · 1 reazione ·
I maintainer di solito rispondono entro 1 giorno
-
GCC 15.2: -Wcast-qual warning - cast discards const qualifier from pointer target type (H5trace.c)Aperta
Difficoltà 2/5 1-3 ore Idoneità per principianti 73/100
I maintainer di solito rispondono entro 1 giorno
-
[Bug] RemotingHelper.connect swaps the socket send and receive buffer configurationForse già presa @amalsaidov l’ha presa oggi. Aperta
Difficoltà 2/5 1-3 ore Idoneità per principianti 82/100
I maintainer di solito rispondono entro 1 giorno
-
needs-area-label
Difficoltà 2/5 1-3 ore Idoneità per principianti 78/100
I maintainer di solito rispondono entro 2 giorni
-
area/ai area/backend component/zeebe kind/task
Difficoltà 2/5 1-3 ore Idoneità per principianti 68/100
I maintainer di solito rispondono entro 1 giorno