From 43570ab850e0fc90cd59a409710bb3d6fb514665 Mon Sep 17 00:00:00 2001 From: tbitw2549 Date: Thu, 30 Nov 2023 20:47:43 +0200 Subject: [PATCH 1/5] feat!: type-safe messages --- packages/vue-i18n-core/src/composer.ts | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/packages/vue-i18n-core/src/composer.ts b/packages/vue-i18n-core/src/composer.ts index 7c8a3e67c..9fc71b269 100644 --- a/packages/vue-i18n-core/src/composer.ts +++ b/packages/vue-i18n-core/src/composer.ts @@ -118,8 +118,10 @@ import { isLegacyVueI18n } from './utils' export { DEFAULT_LOCALE } from '@intlify/core-base' +type LocaleMessageKey = string + // extend VNode interface -export const DEVTOOLS_META = '__INTLIFY_META__' +export const DEVTOOLS_META:LocaleMessageKey = '__INTLIFY_META__' /** @VueI18nComposition */ export type VueMessageType = string | ResourceNode | VNode From 2c01fbb16c93ca74c761b500dbe11449f28e7847 Mon Sep 17 00:00:00 2001 From: tbitw2549 Date: Thu, 30 Nov 2023 23:36:53 +0200 Subject: [PATCH 2/5] chore: placeholder recursive autocompletion type --- packages/vue-i18n-core/src/composer.ts | 3 +++ 1 file changed, 3 insertions(+) diff --git a/packages/vue-i18n-core/src/composer.ts b/packages/vue-i18n-core/src/composer.ts index 9fc71b269..579e909ba 100644 --- a/packages/vue-i18n-core/src/composer.ts +++ b/packages/vue-i18n-core/src/composer.ts @@ -119,6 +119,9 @@ import { isLegacyVueI18n } from './utils' export { DEFAULT_LOCALE } from '@intlify/core-base' type LocaleMessageKey = string +type RecursiveKeys = { + [K in keyof T]: T[K] extends object ? `${K}.${RecursiveKeys}` : K; +}[keyof T]; // extend VNode interface export const DEVTOOLS_META:LocaleMessageKey = '__INTLIFY_META__' From 83d4ff766c72c4b9f52a94237c104c65d983e800 Mon Sep 17 00:00:00 2001 From: tbitw2549 Date: Fri, 1 Dec 2023 00:56:27 +0200 Subject: [PATCH 3/5] fix: full hierarchy autocompletion --- packages/vue-i18n-core/src/composer.ts | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/packages/vue-i18n-core/src/composer.ts b/packages/vue-i18n-core/src/composer.ts index 579e909ba..09c4a2bf3 100644 --- a/packages/vue-i18n-core/src/composer.ts +++ b/packages/vue-i18n-core/src/composer.ts @@ -119,10 +119,15 @@ import { isLegacyVueI18n } from './utils' export { DEFAULT_LOCALE } from '@intlify/core-base' type LocaleMessageKey = string -type RecursiveKeys = { - [K in keyof T]: T[K] extends object ? `${K}.${RecursiveKeys}` : K; -}[keyof T]; - +type FlattenKeys = T extends object + ? { + [K in keyof T & string]: K extends string + ? T[K] extends object + ? `${K}.${FlattenKeys}` + : K + : never; + }[keyof T & string] + : ""; // extend VNode interface export const DEVTOOLS_META:LocaleMessageKey = '__INTLIFY_META__' From b3bd5a9f70a4681dbf0f6e2b8b49d6f282b2be39 Mon Sep 17 00:00:00 2001 From: tbitw2549 Date: Sun, 3 Dec 2023 09:35:38 +0200 Subject: [PATCH 4/5] chore: removing unnecessary type --- packages/vue-i18n-core/src/composer.ts | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/packages/vue-i18n-core/src/composer.ts b/packages/vue-i18n-core/src/composer.ts index 09c4a2bf3..cc37e6da0 100644 --- a/packages/vue-i18n-core/src/composer.ts +++ b/packages/vue-i18n-core/src/composer.ts @@ -118,7 +118,6 @@ import { isLegacyVueI18n } from './utils' export { DEFAULT_LOCALE } from '@intlify/core-base' -type LocaleMessageKey = string type FlattenKeys = T extends object ? { [K in keyof T & string]: K extends string @@ -129,7 +128,7 @@ type FlattenKeys = T extends object }[keyof T & string] : ""; // extend VNode interface -export const DEVTOOLS_META:LocaleMessageKey = '__INTLIFY_META__' +export const DEVTOOLS_META = '__INTLIFY_META__' /** @VueI18nComposition */ export type VueMessageType = string | ResourceNode | VNode From 31f9723c380603b7580faf25a9d432e662051935 Mon Sep 17 00:00:00 2001 From: tbitw2549 Date: Thu, 7 Dec 2023 21:24:55 +0200 Subject: [PATCH 5/5] feat: experimental autocomplete in regular t --- packages/vue-i18n-core/src/composer.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/vue-i18n-core/src/composer.ts b/packages/vue-i18n-core/src/composer.ts index cc37e6da0..df76394a0 100644 --- a/packages/vue-i18n-core/src/composer.ts +++ b/packages/vue-i18n-core/src/composer.ts @@ -682,7 +682,7 @@ export interface ComposerTranslation< * * @VueI18nSee [Scope and Locale Changing](../guide/essentials/scope) */ - (key: Key | ResourceKeys | number): string + >(key: Key | ResourceKeys | number): string /** * Locale message translation for plurals *