Skip to content

Commit b3c6b53

Browse files
committed
feat: improve typeguards
1 parent 2ceaefa commit b3c6b53

File tree

2 files changed

+30
-5
lines changed

2 files changed

+30
-5
lines changed

.changeset/itchy-masks-know.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
"mobx-view-model": minor
3+
---
4+
5+
improved typeguards (isViewModelClass, isViewModelSimpleClass, isViewModel) by pass parent view model generic type

src/utils/typeguards.ts

Lines changed: 25 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,30 @@
11
import type { AnyObject, Class, EmptyObject } from 'yummies/types';
2-
import type { ViewModel } from '../view-model/index.js';
2+
import type {
3+
AnyViewModel,
4+
AnyViewModelSimple,
5+
ViewModel,
6+
ViewModelSimple,
7+
} from '../view-model/index.js';
38

4-
export const isViewModel = <TPayload extends AnyObject = EmptyObject>(
9+
export const isViewModel = <
10+
TPayload extends AnyObject = EmptyObject,
11+
ParentViewModel extends AnyViewModel | AnyViewModelSimple | null = null,
12+
>(
513
value: AnyObject,
6-
): value is ViewModel<TPayload> => value.payloadChanged;
14+
): value is ViewModel<TPayload, ParentViewModel> => value.payloadChanged;
715

8-
export const isViewModelClass = <TPayload extends AnyObject = EmptyObject>(
16+
export const isViewModelClass = <
17+
TPayload extends AnyObject = EmptyObject,
18+
ParentViewModel extends AnyViewModel | AnyViewModelSimple | null = null,
19+
>(
920
value: Function,
10-
): value is Class<ViewModel<TPayload>> => value.prototype.payloadChanged;
21+
): value is Class<ViewModel<TPayload, ParentViewModel>> =>
22+
value.prototype.payloadChanged;
23+
24+
export const isViewModeSimpleClass = <
25+
TPayload extends AnyObject = EmptyObject,
26+
ParentViewModel extends AnyViewModel | AnyViewModelSimple | null = null,
27+
>(
28+
value: Function,
29+
): value is Class<ViewModelSimple<TPayload, ParentViewModel>> =>
30+
!isViewModelClass(value);

0 commit comments

Comments
 (0)