diff --git a/examples/react/class-component-ts/src/App.tsx b/examples/react/class-component-ts/src/App.tsx index d69540dc..59073ba8 100644 --- a/examples/react/class-component-ts/src/App.tsx +++ b/examples/react/class-component-ts/src/App.tsx @@ -111,7 +111,7 @@ const FinalApp = AgileHOC(App, { myState3: MY_STATE_3, myUndefined: undefined, myComputed: MY_COMPUTED, - myCollection: MY_COLLECTION as any, + myCollection: MY_COLLECTION, myGroup: MY_COLLECTION.getGroupWithReference('myGroup'), }); diff --git a/examples/react/class-component-ts/yarn.lock b/examples/react/class-component-ts/yarn.lock index 2ac046d4..71782d78 100644 --- a/examples/react/class-component-ts/yarn.lock +++ b/examples/react/class-component-ts/yarn.lock @@ -3,16 +3,16 @@ "@agile-ts/api@file:.yalc/@agile-ts/api": - version "0.0.9" + version "0.0.14" "@agile-ts/core@file:.yalc/@agile-ts/core": - version "0.0.9" + version "0.0.13" "@agile-ts/multieditor@file:.yalc/@agile-ts/multieditor": - version "0.0.9" + version "0.0.13" "@agile-ts/react@file:.yalc/@agile-ts/react": - version "0.0.9" + version "0.0.14" "@babel/code-frame@7.8.3": version "7.8.3" diff --git a/examples/react/functional-component-ts/src/App.tsx b/examples/react/functional-component-ts/src/App.tsx index 229611ef..5e49dc95 100644 --- a/examples/react/functional-component-ts/src/App.tsx +++ b/examples/react/functional-component-ts/src/App.tsx @@ -35,7 +35,7 @@ const App = (props: any) => { MY_COLLECTION.getSelector('mySelector'), MY_STATE_3, undefined, - MY_COLLECTION as any, + MY_COLLECTION, ]); const [myGroup] = useAgile([MY_COLLECTION.getGroupWithReference('myGroup')]); diff --git a/packages/core/src/collection/index.ts b/packages/core/src/collection/index.ts index 4c8d94ab..426935f0 100644 --- a/packages/core/src/collection/index.ts +++ b/packages/core/src/collection/index.ts @@ -1199,7 +1199,7 @@ export class Collection { } } -export type DefaultItem = { [key: string]: any }; +export type DefaultItem = Record; // same as { [key: string]: any }; export type CollectionKey = string | number; export type ItemKey = string | number; diff --git a/packages/react/src/hocs/AgileHOC.ts b/packages/react/src/hocs/AgileHOC.ts index 6a004b4b..aedd49eb 100644 --- a/packages/react/src/hocs/AgileHOC.ts +++ b/packages/react/src/hocs/AgileHOC.ts @@ -255,7 +255,11 @@ export class AgileReactComponent extends React.Component { } } -type SubscribableAgileInstancesType = State | Collection | Observer | undefined; +type SubscribableAgileInstancesType = + | State + | Collection //https://stackoverflow.com/questions/66987727/type-classa-id-number-name-string-is-not-assignable-to-type-classar + | Observer + | undefined; type DepsType = | Array | { [key: string]: SubscribableAgileInstancesType } diff --git a/packages/react/src/hooks/useAgile.ts b/packages/react/src/hooks/useAgile.ts index 25e0f8a6..99cf1f41 100644 --- a/packages/react/src/hooks/useAgile.ts +++ b/packages/react/src/hooks/useAgile.ts @@ -97,46 +97,34 @@ export function useAgile< // Array Type // https://www.typescriptlang.org/docs/handbook/release-notes/typescript-2-1.html type AgileHookArrayType = { - [K in keyof T]: T[K] extends Group + [K in keyof T]: T[K] extends Collection | Group ? U[] - : T[K] extends State + : T[K] extends State | Observer ? U - : T[K] extends Observer - ? U - : T[K] extends Collection - ? U[] : T[K] extends undefined ? undefined - : T[K] extends Group | undefined + : T[K] extends Collection | Group | undefined ? U[] | undefined - : T[K] extends State | undefined + : T[K] extends State | Observer | undefined ? U | undefined - : T[K] extends Observer | undefined - ? U | undefined - : T[K] extends Collection | undefined - ? U[] | undefined : never; }; // No Array Type -type AgileHookType = T extends Group +type AgileHookType = T extends Collection | Group ? U[] - : T extends State + : T extends State | Observer ? U - : T extends Observer - ? U - : T extends Collection - ? U[] : T extends undefined ? undefined - : T extends Group | undefined + : T extends Collection | Group | undefined ? U[] | undefined - : T extends State | undefined + : T extends State | Observer | undefined ? U | undefined - : T extends Observer | undefined - ? U | undefined - : T extends Collection | undefined - ? U[] | undefined : never; -type SubscribableAgileInstancesType = State | Collection | Observer | undefined; +type SubscribableAgileInstancesType = + | State + | Collection //https://stackoverflow.com/questions/66987727/type-classa-id-number-name-string-is-not-assignable-to-type-classar + | Observer + | undefined; diff --git a/packages/react/tests/old/useAgile.spec.ts b/packages/react/tests/old/useAgile.spec.ts index 7e0296f3..4c36b30b 100644 --- a/packages/react/tests/old/useAgile.spec.ts +++ b/packages/react/tests/old/useAgile.spec.ts @@ -1,8 +1,10 @@ +// Be aware that in the test folder other ts rules count than in the src folder // THIS ARE ONLY TYPE TESTS +// NOTE: Has to be out commented because React Hooks in not React Components are not possible! -/* NOTE: Has to be out commented because React Hooks in not React Components are not possible! -import { Agile } from '@agile-ts/core'; -import { useAgile } from '../../src'; +/* +import { Agile, Collection } from '@agile-ts/core'; +import { useAgile } from './hooks/useAgile'; const App = new Agile(); @@ -27,7 +29,7 @@ const [ MY_SELECTOR, MY_NUMBER_STATE, MY_STRING_COMPUTED, - MY_COLLECTION, + MY_COLLECTION as any, MY_COLLECTION.getGroup('test'), MY_NUMBER_STATE, ]); @@ -36,8 +38,12 @@ const myStringState2 = useAgile(MY_STRING_STATE); const [myGroup2, myStringState3, myCollection2] = useAgile([ MY_COLLECTION.getGroup('test'), MY_STRING_STATE, - MY_COLLECTION, + MY_COLLECTION as any, ]); -const myCollection3 = useAgile(MY_COLLECTION) -*/ +const myState10 = useAgile(MY_NUMBER_STATE); +const myCollection10 = useAgile(MY_COLLECTION); +const myCollection11 = useAgile( + new Collection<{ id: number; name: string }>(App) +); + */