diff --git a/packages/vue-apollo-composable/package.json b/packages/vue-apollo-composable/package.json index 85cd071..c0e4cf3 100644 --- a/packages/vue-apollo-composable/package.json +++ b/packages/vue-apollo-composable/package.json @@ -37,6 +37,7 @@ }, "dependencies": { "throttle-debounce": "^2.3.0", + "ts-essentials": "^8.1.0", "vue-demi": "^0.9.1" }, "peerDependencies": { diff --git a/packages/vue-apollo-composable/src/useResult.ts b/packages/vue-apollo-composable/src/useResult.ts index 1b51b4e..be8661a 100644 --- a/packages/vue-apollo-composable/src/useResult.ts +++ b/packages/vue-apollo-composable/src/useResult.ts @@ -1,5 +1,6 @@ import { Ref, computed } from 'vue-demi' import { ExtractSingleKey } from './util/ExtractSingleKey' +import type { DeepNonNullable, DeepRequired } from 'ts-essentials' export type UseResultReturn = Readonly>> @@ -60,7 +61,7 @@ export function useResult< > ( result: Ref, defaultValue: TDefaultValue | undefined, - pick: (data: TResult) => TReturnValue + pick: (data: DeepRequired>) => TReturnValue ): UseResultReturn export function useResult< @@ -70,14 +71,14 @@ export function useResult< > ( result: Ref, defaultValue?: TDefaultValue, - pick?: (data: TResult) => TReturnValue, + pick?: (data: DeepRequired>) => TReturnValue, ): UseResultReturn { return computed(() => { const value = result.value if (value) { if (pick) { try { - return pick(value) + return pick(value as DeepRequired>) } catch (e) { // Silent error } diff --git a/packages/vue-apollo-composable/tests/types/useResult-types.test.ts b/packages/vue-apollo-composable/tests/types/useResult-types.test.ts index 7b4c8f1..b1de2f0 100644 --- a/packages/vue-apollo-composable/tests/types/useResult-types.test.ts +++ b/packages/vue-apollo-composable/tests/types/useResult-types.test.ts @@ -107,12 +107,12 @@ const { result: multiKeyResult } = multiKeyQuery const useResult_WithPickFunction = useResult( multiKeyResult, [] as const, - data => data?.otherExample?.__typename, + data => data.otherExample.__typename, ) assertExactType< typeof useResult_WithPickFunction, - UseResultReturn<'OtherExample' | [] | undefined> + UseResultReturn<'OtherExample' | []> >(useResult_WithPickFunction) if (typeof useResult_WithPickFunction.value === 'string') { diff --git a/yarn.lock b/yarn.lock index ccf706f..3711be5 100644 --- a/yarn.lock +++ b/yarn.lock @@ -14918,6 +14918,11 @@ tryer@^1.0.1: resolved "https://registry.yarnpkg.com/tryer/-/tryer-1.0.1.tgz#f2c85406800b9b0f74c9f7465b81eaad241252f8" integrity sha512-c3zayb8/kWWpycWYg87P71E1S1ZL6b6IJxfb5fvsUgsf0S2MVGaDhDXXjDMpdCpfWXqptc+4mXwmiy1ypXqRAA== +ts-essentials@^8.1.0: + version "8.1.0" + resolved "https://registry.yarnpkg.com/ts-essentials/-/ts-essentials-8.1.0.tgz#bc982b242db226b84c89477d3d42630ee2954513" + integrity sha512-34xALeQADWRYq9kbtprP4KdpTQ3v3BBIs/U4SpaP+C4++B8ijXY5NnILRJLchQVMzw7YBzKuGMUMrI9uT+ALVw== + ts-invariant@^0.4.0: version "0.4.4" resolved "https://registry.yarnpkg.com/ts-invariant/-/ts-invariant-0.4.4.tgz#97a523518688f93aafad01b0e80eb803eb2abd86"