File tree Expand file tree Collapse file tree 5 files changed +54
-15
lines changed Expand file tree Collapse file tree 5 files changed +54
-15
lines changed Original file line number Diff line number Diff line change @@ -11,6 +11,7 @@ import {
11
11
} from '@intlify/shared'
12
12
import { HelperNameMap } from '@intlify/message-compiler'
13
13
import { Path } from './resolver'
14
+ import { IsNever } from './types'
14
15
15
16
type ExtractToStringKey < T > = Extract < keyof T , 'toString' >
16
17
type ExtractToStringFunction < T > = T [ ExtractToStringKey < T > ]
@@ -21,8 +22,38 @@ type StringConvertable<T> = ExtractToStringKey<T> extends never
21
22
? T
22
23
: unknown
23
24
25
+ /**
26
+ *
27
+ * The interface used for narrowing types using generated types.
28
+ *
29
+ * @remarks
30
+ *
31
+ * The type generated by 3rd party (e.g. nuxt/i18n)
32
+ *
33
+ * @example
34
+ * ```ts
35
+ * // generated-i18n-types.d.ts (`.d.ts` file at your app)
36
+ *
37
+ * declare module '@intlify/core' {
38
+ * interface GeneratedTypeConfig {
39
+ * locale: "en" | "ja"
40
+ * }
41
+ * }
42
+ * ```
43
+ */
44
+ export interface GeneratedTypeConfig { }
45
+
46
+ /**
47
+ * Generated locale which resolves to `never` if left unset
48
+ */
49
+ export type GeneratedLocale =
50
+ GeneratedTypeConfig extends Record < 'locale' , infer CustomLocale >
51
+ ? CustomLocale
52
+ : never
53
+
24
54
/** @VueI 18nGeneral */
25
- export type Locale = string
55
+ export type Locale =
56
+ IsNever < GeneratedLocale > extends true ? string : GeneratedLocale
26
57
27
58
/** @VueI 18nGeneral */
28
59
// prettier-ignore
Original file line number Diff line number Diff line change @@ -42,7 +42,8 @@ export {
42
42
MessageCompilerContext ,
43
43
CompileError ,
44
44
MessageContext ,
45
- RemovedIndexResources
45
+ RemovedIndexResources ,
46
+ GeneratedTypeConfig
46
47
} from '@intlify/core-base'
47
48
export {
48
49
VueMessageType ,
Original file line number Diff line number Diff line change @@ -109,7 +109,8 @@ import type {
109
109
IsEmptyObject ,
110
110
CoreMissingType ,
111
111
JsonPaths ,
112
- TranslationsPaths
112
+ TranslationsPaths ,
113
+ GeneratedLocale
113
114
} from '@intlify/core-base'
114
115
import type { VueDevToolsEmitter } from '@intlify/devtools-types'
115
116
@@ -1274,11 +1275,13 @@ export interface Composer<
1274
1275
| PickupLocales < NonNullable < Messages > >
1275
1276
| PickupLocales < NonNullable < DateTimeFormats > >
1276
1277
| PickupLocales < NonNullable < NumberFormats > > ,
1277
- Locales = OptionLocale extends Locale
1278
- ? IsNever < ResourceLocales > extends true
1279
- ? Locale
1280
- : ResourceLocales
1281
- : OptionLocale | ResourceLocales
1278
+ Locales = Locale extends GeneratedLocale
1279
+ ? GeneratedLocale
1280
+ : OptionLocale extends Locale
1281
+ ? IsNever < ResourceLocales > extends true
1282
+ ? Locale
1283
+ : ResourceLocales
1284
+ : OptionLocale | ResourceLocales
1282
1285
> extends ComposerCustom {
1283
1286
/**
1284
1287
* @remarks
Original file line number Diff line number Diff line change @@ -46,7 +46,8 @@ import type {
46
46
PickupPaths ,
47
47
PickupFormatPathKeys ,
48
48
IsEmptyObject ,
49
- IsNever
49
+ IsNever ,
50
+ GeneratedLocale
50
51
} from '@intlify/core-base'
51
52
import type { VueDevToolsEmitter } from '@intlify/devtools-types'
52
53
import type {
@@ -1047,11 +1048,13 @@ export interface VueI18n<
1047
1048
| PickupLocales < NonNullable < Messages > >
1048
1049
| PickupLocales < NonNullable < DateTimeFormats > >
1049
1050
| PickupLocales < NonNullable < NumberFormats > > ,
1050
- Locales = OptionLocale extends string
1051
- ? [ ResourceLocales ] extends [ never ]
1052
- ? Locale
1053
- : ResourceLocales
1054
- : OptionLocale | ResourceLocales ,
1051
+ Locales = Locale extends GeneratedLocale
1052
+ ? GeneratedLocale
1053
+ : OptionLocale extends string
1054
+ ? [ ResourceLocales ] extends [ never ]
1055
+ ? Locale
1056
+ : ResourceLocales
1057
+ : OptionLocale | ResourceLocales ,
1055
1058
Composition extends Composer <
1056
1059
Messages ,
1057
1060
DateTimeFormats ,
Original file line number Diff line number Diff line change @@ -52,7 +52,8 @@ export {
52
52
MessageCompilerContext ,
53
53
CompileError ,
54
54
MessageContext ,
55
- RemovedIndexResources
55
+ RemovedIndexResources ,
56
+ GeneratedTypeConfig
56
57
} from '@intlify/core-base'
57
58
export {
58
59
VueMessageType ,
You can’t perform that action at this time.
0 commit comments