Skip to content

Commit

Permalink
Improved problem/solution for 34
Browse files Browse the repository at this point in the history
  • Loading branch information
mattpocock committed Aug 7, 2023
1 parent 7ac23db commit 417f69a
Show file tree
Hide file tree
Showing 2 changed files with 4 additions and 10 deletions.
3 changes: 0 additions & 3 deletions src/06-challenges/34-internationalization.problem.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,9 +6,6 @@ type GetParamKeys<TTranslation extends string> = TTranslation extends ""
? [Param, ...GetParamKeys<Tail>]
: [];

type GetParamKeysAsUnion<TTranslation extends string> =
GetParamKeys<TTranslation>[number];

const translate = (translations: unknown, key: unknown, ...args: unknown[]) => {
const translation = translations[key];
const params: any = args[0] || {};
Expand Down
11 changes: 4 additions & 7 deletions src/06-challenges/34-internationalization.solution.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,19 +6,16 @@ type GetParamKeys<TTranslation extends string> = TTranslation extends ""
? [Param, ...GetParamKeys<Tail>]
: [];

type GetParamKeysAsUnion<TTranslation extends string> =
GetParamKeys<TTranslation>[number];

const translate = <
TTranslations extends Record<string, string>,
TKey extends keyof TTranslations,
TDynamicKeys = GetParamKeysAsUnion<TTranslations[TKey]>,
TComputedArgs extends string[] = GetParamKeys<TTranslations[TKey]>,
>(
translations: TTranslations,
key: TKey,
...args: [TDynamicKeys] extends [never]
...args: TComputedArgs extends []
? []
: [dynamicArgs: Record<TDynamicKeys & string, string>]
: [params: Record<TComputedArgs[number], string>]
) => {
const translation = translations[key];
const params: any = args[0] || {};
Expand All @@ -29,7 +26,7 @@ const translate = <
// TESTS

const translations = {
title: "Hello, {name}!",
title: "Hello, {firstName} {surname}!",
subtitle: "You have {count} unread messages.",
button: "Click me!",
} as const;
Expand Down

0 comments on commit 417f69a

Please sign in to comment.