Skip to content

Commit 047e5d8

Browse files
committed
fix: loadForm returns an InputForm when sending 'input' as type
Uses type generics to check the return type
1 parent 7578486 commit 047e5d8

File tree

1 file changed

+11
-7
lines changed

1 file changed

+11
-7
lines changed

src/Event.ts

Lines changed: 11 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import { FormError } from './Errors';
22
import { FormHub } from './Hub';
3-
import { Form } from './form';
3+
import { DualButtonForm, Form } from './form';
44
import { InputForm } from './form/Input';
55
import { MultiButtonForm } from './form/MultiButton';
66
import { 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+
8089
export 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

Comments
 (0)