diff --git a/.changeset/olive-crews-repeat.md b/.changeset/olive-crews-repeat.md new file mode 100644 index 00000000..8ce1d6ae --- /dev/null +++ b/.changeset/olive-crews-repeat.md @@ -0,0 +1,31 @@ +--- +'@vocab/core': minor +--- + +Add `TranslationKeys` type + +The `TranslationKeys` type can be used to get a string literal union of all the translation keys used in a translation file. + +**EXAMPLE USAGE** + +```jsonc +// .vocab/en.translations.json +{ + "Hello": { + "message": "Hello" + }, + "Goodbye": { + "message": "Goodbye" + } +} +``` + +After running `vocab compile`: + +```tsx +import type { TranslationKeys } from '@vocab/core'; +import translations from './.vocab'; + +// 'Hello' | 'Goodbye' +type Keys = TranslationKeys; +``` diff --git a/packages/core/src/types.ts b/packages/core/src/types.ts index b17d382e..07a0f5d3 100644 --- a/packages/core/src/types.ts +++ b/packages/core/src/types.ts @@ -75,6 +75,10 @@ export type TranslationFile< load: (language: Language) => Promise; }; +export type TranslationKeys< + Translations extends TranslationFile, +> = keyof Awaited>; + export interface LanguageTarget { // The name or tag of a language name: LanguageName;