diff --git a/packages/apollo-angular/CHANGELOG.md b/packages/apollo-angular/CHANGELOG.md index a6c866806..80abdb7e8 100644 --- a/packages/apollo-angular/CHANGELOG.md +++ b/packages/apollo-angular/CHANGELOG.md @@ -2,6 +2,8 @@ ### vNEXT +- Use more generic types and make everything more strict [PR #885](https://github.com/apollographql/apollo-angular/pull/885) + ### v1.4.1 - schematics: bump dependencies diff --git a/packages/apollo-angular/src/Apollo.ts b/packages/apollo-angular/src/Apollo.ts index e95eb9dfd..671e9503a 100644 --- a/packages/apollo-angular/src/Apollo.ts +++ b/packages/apollo-angular/src/Apollo.ts @@ -7,12 +7,13 @@ import { ApolloQueryResult, SubscriptionOptions, ApolloClientOptions, + ObservableQuery, } from 'apollo-client'; import {FetchResult} from 'apollo-link'; import {Observable, from} from 'rxjs'; import {QueryRef} from './QueryRef'; -import {TypedVariables, ExtraSubscriptionOptions, R} from './types'; +import {ExtraSubscriptionOptions, R} from './types'; import {APOLLO_OPTIONS} from './tokens'; import {fromPromise, wrapWithZone, fixObservable} from './utils'; @@ -22,36 +23,34 @@ export class ApolloBase { private _client?: ApolloClient, ) {} - public watchQuery( - options: WatchQueryOptions & TypedVariables, - ): QueryRef { + public watchQuery(options: WatchQueryOptions): QueryRef { return new QueryRef( - this.client.watchQuery({...options}), + this.client.watchQuery({...options}) as ObservableQuery, this.ngZone, ); } public query( - options: QueryOptions & TypedVariables, + options: QueryOptions, ): Observable> { return fromPromise>(() => - this.client.query({...options}), + this.client.query({...options}), ); } public mutate( - options: MutationOptions & TypedVariables, + options: MutationOptions, ): Observable> { return fromPromise>(() => - this.client.mutate({...options}), + this.client.mutate({...options}), ); } - public subscribe( - options: SubscriptionOptions, + public subscribe( + options: SubscriptionOptions, extra?: ExtraSubscriptionOptions, ): Observable { - const obs = from(fixObservable(this.client.subscribe({...options}))); + const obs = from(fixObservable(this.client.subscribe({...options}))); return extra && extra.useZone !== true ? obs diff --git a/packages/apollo-angular/src/Mutation.ts b/packages/apollo-angular/src/Mutation.ts index afe0b582a..a0ac271ed 100644 --- a/packages/apollo-angular/src/Mutation.ts +++ b/packages/apollo-angular/src/Mutation.ts @@ -15,7 +15,7 @@ export class Mutation { public mutate( variables?: V, - options?: MutationOptions, + options?: MutationOptions, ): Observable> { return this.apollo.use(this.client).mutate({ ...options, diff --git a/packages/apollo-angular/src/Query.ts b/packages/apollo-angular/src/Query.ts index 7c6af38c4..bc0782d3b 100644 --- a/packages/apollo-angular/src/Query.ts +++ b/packages/apollo-angular/src/Query.ts @@ -14,7 +14,7 @@ export class Query { constructor(protected apollo: Apollo) {} - public watch(variables?: V, options?: WatchQueryOptions): QueryRef { + public watch(variables?: V, options?: WatchQueryOptions): QueryRef { return this.apollo.use(this.client).watchQuery({ ...options, variables, @@ -24,7 +24,7 @@ export class Query { public fetch( variables?: V, - options?: QueryOptions, + options?: QueryOptions, ): Observable> { return this.apollo.use(this.client).query({ ...options, diff --git a/packages/apollo-angular/src/QueryRef.ts b/packages/apollo-angular/src/QueryRef.ts index d8463eadb..3cbed37f6 100644 --- a/packages/apollo-angular/src/QueryRef.ts +++ b/packages/apollo-angular/src/QueryRef.ts @@ -18,7 +18,7 @@ export class QueryRef { public valueChanges: Observable>; public queryId: string; - constructor(private obsQuery: ObservableQuery, ngZone: NgZone) { + constructor(private obsQuery: ObservableQuery, ngZone: NgZone) { this.valueChanges = wrapWithZone( from(fixObservable(this.obsQuery)), ngZone, @@ -58,8 +58,12 @@ export class QueryRef { return this.obsQuery.fetchMore(fetchMoreOptions); } - public subscribeToMore(options: SubscribeToMoreOptions): () => void { - return this.obsQuery.subscribeToMore(options); + public subscribeToMore( + options: SubscribeToMoreOptions, + ): () => void { + // XXX: there's a bug in apollo-client typings + // it should not inherit types from ObservableQuery + return this.obsQuery.subscribeToMore(options as any); } public updateQuery( mapFn: (previousQueryResult: T, options: UpdateQueryOptions) => T, diff --git a/packages/apollo-angular/src/Subscription.ts b/packages/apollo-angular/src/Subscription.ts index b25e44649..a525480e2 100644 --- a/packages/apollo-angular/src/Subscription.ts +++ b/packages/apollo-angular/src/Subscription.ts @@ -19,10 +19,10 @@ export class Subscription { public subscribe( variables?: V, - options?: SubscriptionOptions, + options?: SubscriptionOptions, extra?: ExtraSubscriptionOptions, ): Observable> { - return this.apollo.use(this.client).subscribe( + return this.apollo.use(this.client).subscribe( { ...options, variables, diff --git a/packages/apollo-angular/src/types.ts b/packages/apollo-angular/src/types.ts index 5dfe3d01b..dcf951b13 100644 --- a/packages/apollo-angular/src/types.ts +++ b/packages/apollo-angular/src/types.ts @@ -6,10 +6,8 @@ import { } from 'apollo-client'; import {ExecutionResult} from 'graphql'; -export type R = Record; - -export type TypedVariables = { - variables?: T; +export type R = { + [key: string]: any; }; export interface ExtraSubscriptionOptions { @@ -18,17 +16,17 @@ export interface ExtraSubscriptionOptions { export type Omit = Pick>; -export interface WatchQueryOptions - extends Omit {} +export interface WatchQueryOptions + extends Omit, 'query' | 'variables'> {} -export interface QueryOptions - extends Omit {} +export interface QueryOptions + extends Omit, 'query' | 'variables'> {} -export interface MutationOptions - extends Omit {} +export interface MutationOptions + extends Omit, 'mutation' | 'variables'> {} -export interface SubscriptionOptions - extends Omit {} +export interface SubscriptionOptions + extends Omit, 'query' | 'variables'> {} export interface SubscriptionResult extends ExecutionResult { data?: T;