11import { FormError } from './Errors' ;
22import { FormHub } from './Hub' ;
3- import { Form } from './form' ;
3+ import { DualButtonForm , Form } from './form' ;
44import { InputForm } from './form/Input' ;
55import { MultiButtonForm } from './form/MultiButton' ;
66import { FormArguments } from './Arguments' ;
@@ -77,6 +77,15 @@ export class FormEventProducer {
7777 }
7878}
7979
80+ type FormType = 'multi-button' | 'input' | 'dual-button' ;
81+ type LoadFormReturn < T extends FormType | undefined > = T extends 'multi-button'
82+ ? MultiButtonForm
83+ : T extends 'input'
84+ ? InputForm
85+ : T extends 'dual-button'
86+ ? DualButtonForm
87+ : Form ;
88+
8089export class FormEvent {
8190 protected _form : Form | undefined = undefined ;
8291 protected _name : string | undefined = undefined ;
@@ -97,12 +106,7 @@ export class FormEvent {
97106 }
98107 }
99108
100- loadForm ( name : string ) : Form ;
101- loadForm ( name : string , type : 'multi-button' ) : MultiButtonForm ;
102- loadForm ( name : string , type : 'input' ) : InputForm ;
103- loadForm ( name : string , type : 'dual-button' ) : InputForm ;
104-
105- loadForm ( name : string , type ?: 'multi-button' | 'input' | 'dual-button' ) : Form {
109+ loadForm < T extends FormType > ( name : string , type ?: T | undefined ) : LoadFormReturn < T > {
106110 if ( name in this . _hub . forms ) {
107111 const form = this . _hub . forms [ name ] ;
108112 if ( type && form . type !== type ) {
0 commit comments