Skip to content

Commit

Permalink
Fix type inference of attachOperation
Browse files Browse the repository at this point in the history
  • Loading branch information
igorkamyshev committed Mar 2, 2023
1 parent e298d2f commit c9766d0
Show file tree
Hide file tree
Showing 3 changed files with 34 additions and 18 deletions.
5 changes: 5 additions & 0 deletions .changeset/tough-cats-change.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
'@farfetched/core': patch
---

Fix type inference of `attachOperation`
20 changes: 20 additions & 0 deletions packages/core/src/attach/__tests__/attach.test-d.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
import { Store } from 'effector';
import { describe, expectTypeOf, test } from 'vitest';

import { Query } from '../../query/type';
import { attachOperation } from '../attach';

describe('attachOperation', () => {
test('Query + source/mapParams, issue #280', () => {
const query: Query<number, unknown, unknown, null> = {} as any;

const $source: Store<number> = {} as any;

const result = attachOperation(query, {
source: $source,
mapParams: (_: void, params) => params + 1,
});

expectTypeOf(result).toEqualTypeOf<Query<void, unknown, unknown, null>>();
});
});
27 changes: 9 additions & 18 deletions packages/core/src/attach/attach.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,21 +5,21 @@ import { Query, QueryInitialData } from '../query/type';
import {
RemoteOperation,
RemoteOperationError,
RemoteOperationParams,
RemoteOperationResult,
} from '../remote_operation/type';

// -- Query overloads

export function attachOperation<
NewParams,
OriginalParams,
Q extends Query<OriginalParams, any, any, any>,
Q extends Query<any, any, any, any>,
Source
>(
operation: Q,
config: {
source: Store<Source>;
mapParams: (params: NewParams, source: Source) => OriginalParams;
mapParams: (params: NewParams, source: Source) => RemoteOperationParams<Q>;
}
): Query<
NewParams,
Expand All @@ -28,13 +28,9 @@ export function attachOperation<
QueryInitialData<Q>
>;

export function attachOperation<
NewParams,
OriginalParams,
Q extends Query<OriginalParams, any, any, any>
>(
export function attachOperation<NewParams, Q extends Query<any, any, any, any>>(
operation: Q,
config: { mapParams: (params: NewParams) => OriginalParams }
config: { mapParams: (params: NewParams) => RemoteOperationParams<Q> }
): Query<
NewParams,
RemoteOperationResult<Q>,
Expand All @@ -50,24 +46,19 @@ export function attachOperation<Q extends Query<any, any, any, any>>(

export function attachOperation<
NewParams,
OriginalParams,
M extends Mutation<OriginalParams, any, any>,
M extends Mutation<any, any, any>,
Source
>(
operation: M,
config: {
source: Store<Source>;
mapParams: (params: NewParams, source: Source) => OriginalParams;
mapParams: (params: NewParams, source: Source) => RemoteOperationParams<M>;
}
): Mutation<NewParams, RemoteOperationResult<M>, RemoteOperationError<M>>;

export function attachOperation<
NewParams,
OriginalParams,
M extends Mutation<OriginalParams, any, any>
>(
export function attachOperation<NewParams, M extends Mutation<any, any, any>>(
operation: M,
config: { mapParams: (params: NewParams) => OriginalParams }
config: { mapParams: (params: NewParams) => RemoteOperationParams<M> }
): Mutation<NewParams, RemoteOperationResult<M>, RemoteOperationError<M>>;

export function attachOperation<M extends Mutation<any, any, any>>(
Expand Down

0 comments on commit c9766d0

Please sign in to comment.