From 4a7afc3924f1c9f4ea92024cd137dd46835a9323 Mon Sep 17 00:00:00 2001 From: Haroen Viaene Date: Thu, 20 Jun 2024 12:56:08 +0200 Subject: [PATCH] fix(types): make algoliasearch detection compatible with TS 5.4.5 (#6244) I can't manage to reproduce this locally, even if i update everything to 5.4.5, but in a fresh Next.js example (like https://codesandbox.io/s/47fy7c) `hitsPerPage` isn't accepted to Configure (because PlainSearchParameters is any) This is I believe linked to https://github.com/microsoft/TypeScript/pull/56004, maybe also to https://github.com/sindresorhus/type-fest/issues/846 (although the case seems different). Essentially before this change the types like `ClientLiteV5` were evaluated to `any` instead of `unknown`, poisoning the entire type and turning everything into any. The solution is to first check if `typeof AlgoliaSearchLite` is any, and if it is any we don't even evaluate the rest of teh type. Of course if it isn't any it works correctly for v5 still. Again, unfortunately this isn't reproducible in this repo, even when every typescript version is updated to 5.4.5, but at least the error will be fixed fixes #5989 --- .../types/algoliasearch.d.ts | 30 +++++++++++-------- 1 file changed, 18 insertions(+), 12 deletions(-) diff --git a/packages/algoliasearch-helper/types/algoliasearch.d.ts b/packages/algoliasearch-helper/types/algoliasearch.d.ts index 96befdb698..1cc93d2dd1 100644 --- a/packages/algoliasearch-helper/types/algoliasearch.d.ts +++ b/packages/algoliasearch-helper/types/algoliasearch.d.ts @@ -28,18 +28,24 @@ type SearchClientShape = { // @ts-ignore type ClientV3_4 = ReturnType; -type ClientLiteV5 = AnyToUnknown< - // @ts-ignore - ReturnType ->; -type ClientFullV5 = AnyToUnknown< - // @ts-ignore - ReturnType ->; -type ClientSearchV5 = AnyToUnknown< - // @ts-ignore - ReturnType ->; +type ClientLiteV5 = AnyToUnknown extends unknown + ? unknown + : AnyToUnknown< + // @ts-ignore + ReturnType + >; +type ClientFullV5 = AnyToUnknown extends unknown + ? unknown + : AnyToUnknown< + // @ts-ignore + ReturnType + >; +type ClientSearchV5 = AnyToUnknown extends unknown + ? unknown + : AnyToUnknown< + // @ts-ignore + ReturnType + >; type ClientV5 = ClientLiteV5 extends SearchClientShape ? ClientLiteV5 : ClientSearchV5 extends SearchClientShape