@@ -501,28 +501,41 @@ export default class ServiceGenerator {
501501 markAllowedSchema ( JSON . stringify ( pathItem ) , this . openAPIData ) ;
502502
503503 operationObject . parameters = operationObject . parameters ?. filter (
504- ( item : ParameterObject ) => item ?. in !== `${ parametersInsEnum . header } `
504+ ( item : ParameterObject | ReferenceObject ) => {
505+ const parameter = this . resolveParameterRef ( item ) ;
506+ return parameter ?. in !== `${ parametersInsEnum . header } ` ;
507+ }
505508 ) ;
506509 const props = [ ] as IPropObject [ ] ;
507510
508- operationObject . parameters ?. forEach ( ( parameter : ParameterObject ) => {
509- props . push ( {
510- name : parameter . name ,
511- desc : ( parameter . description ?? '' ) . replace ( lineBreakReg , '' ) ,
512- required : parameter . required || false ,
513- type : this . getType ( parameter . schema ) ,
514- } ) ;
515- } ) ;
511+ operationObject . parameters ?. forEach (
512+ ( param : ParameterObject | ReferenceObject ) => {
513+ const parameter = this . resolveParameterRef ( param ) ;
514+ if ( parameter ) {
515+ props . push ( {
516+ name : parameter . name ,
517+ desc : ( parameter . description ?? '' ) . replace ( lineBreakReg , '' ) ,
518+ required : parameter . required || false ,
519+ type : this . getType ( parameter . schema ) ,
520+ } ) ;
521+ }
522+ }
523+ ) ;
516524
517525 // parameters may be in path
518- pathItem . parameters ?. forEach ( ( parameter : ParameterObject ) => {
519- props . push ( {
520- name : parameter . name ,
521- desc : ( parameter . description ?? '' ) . replace ( lineBreakReg , '' ) ,
522- required : parameter . required ,
523- type : this . getType ( parameter . schema ) ,
524- } ) ;
525- } ) ;
526+ pathItem . parameters ?. forEach (
527+ ( param : ParameterObject | ReferenceObject ) => {
528+ const parameter = this . resolveParameterRef ( param ) ;
529+ if ( parameter ) {
530+ props . push ( {
531+ name : parameter . name ,
532+ desc : ( parameter . description ?? '' ) . replace ( lineBreakReg , '' ) ,
533+ required : parameter . required ,
534+ type : this . getType ( parameter . schema ) ,
535+ } ) ;
536+ }
537+ }
538+ ) ;
526539
527540 const typeName = this . getFunctionParamsTypeName ( {
528541 ...operationObject ,
@@ -1468,6 +1481,22 @@ export default class ServiceGenerator {
14681481 } ) ;
14691482 }
14701483
1484+ private resolveParameterRef (
1485+ param : ParameterObject | ReferenceObject
1486+ ) : ParameterObject | null {
1487+ if ( ! isReferenceObject ( param ) ) {
1488+ return param ;
1489+ }
1490+
1491+ // 解析 $ref 引用,从 components.parameters 中获取实际定义
1492+ const refName = getLastRefName ( param . $ref ) ;
1493+ const parameter = this . openAPIData . components ?. parameters ?. [
1494+ refName
1495+ ] as ParameterObject ;
1496+
1497+ return parameter || null ;
1498+ }
1499+
14711500 private resolveRefObject < T > ( refObject : ReferenceObject | T ) : T {
14721501 if ( ! isReferenceObject ( refObject ) ) {
14731502 return refObject ;
0 commit comments