Skip to content

Commit 7ebb0e4

Browse files
authored
fix: useI18n wrong type and other type broken (#1309)
1 parent d7c8e70 commit 7ebb0e4

File tree

7 files changed

+82
-70
lines changed

7 files changed

+82
-70
lines changed

packages/core-base/src/context.ts

Lines changed: 27 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -355,11 +355,22 @@ let _cid = 0
355355
export function createCoreContext<
356356
Message = string,
357357
Options extends CoreOptions<Message> = CoreOptions<Message>,
358-
Messages = Options['messages'] extends object ? Options['messages'] : {},
359-
DateTimeFormats = Options['datetimeFormats'] extends object
358+
Messages extends Record<string, any> = Options['messages'] extends Record<
359+
string,
360+
any
361+
>
362+
? Options['messages']
363+
: {},
364+
DateTimeFormats extends Record<
365+
string,
366+
any
367+
> = Options['datetimeFormats'] extends Record<string, any>
360368
? Options['datetimeFormats']
361369
: {},
362-
NumberFormats = Options['numberFormats'] extends object
370+
NumberFormats extends Record<
371+
string,
372+
any
373+
> = Options['numberFormats'] extends Record<string, any>
363374
? Options['numberFormats']
364375
: {}
365376
>(
@@ -379,12 +390,20 @@ export function createCoreContext<
379390
SchemaParams<Schema, Message>,
380391
LocaleParams<Locales>
381392
>,
382-
Messages = Options['messages'] extends object ? Options['messages'] : {},
383-
DateTimeFormats = Options['datetimeFormats'] extends object
384-
? Options['datetimeFormats']
393+
Messages extends Record<string, any> = NonNullable<
394+
Options['messages']
395+
> extends Record<string, any>
396+
? NonNullable<Options['messages']>
385397
: {},
386-
NumberFormats = Options['numberFormats'] extends object
387-
? Options['numberFormats']
398+
DateTimeFormats extends Record<string, any> = NonNullable<
399+
Options['datetimeFormats']
400+
> extends Record<string, any>
401+
? NonNullable<Options['datetimeFormats']>
402+
: {},
403+
NumberFormats extends Record<string, any> = NonNullable<
404+
Options['numberFormats']
405+
> extends Record<string, any>
406+
? NonNullable<Options['numberFormats']>
388407
: {}
389408
>(
390409
options: Options

packages/vue-i18n-core/src/composer.ts

Lines changed: 12 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1750,23 +1750,20 @@ export function createComposer<
17501750
SchemaParams<Schema, VueMessageType>,
17511751
LocaleParams<Locales>
17521752
>,
1753-
Messages extends Record<string, any> = Options['messages'] extends Record<
1754-
string,
1755-
any
1756-
>
1757-
? Options['messages']
1753+
Messages extends Record<string, any> = NonNullable<
1754+
Options['messages']
1755+
> extends Record<string, any>
1756+
? NonNullable<Options['messages']>
17581757
: {},
1759-
DateTimeFormats extends Record<
1760-
string,
1761-
any
1762-
> = Options['datetimeFormats'] extends Record<string, any>
1763-
? Options['datetimeFormats']
1758+
DateTimeFormats extends Record<string, any> = NonNullable<
1759+
Options['datetimeFormats']
1760+
> extends Record<string, any>
1761+
? NonNullable<Options['datetimeFormats']>
17641762
: {},
1765-
NumberFormats extends Record<
1766-
string,
1767-
any
1768-
> = Options['numberFormats'] extends Record<string, any>
1769-
? Options['numberFormats']
1763+
NumberFormats extends Record<string, any> = NonNullable<
1764+
Options['numberFormats']
1765+
> extends Record<string, any>
1766+
? NonNullable<Options['numberFormats']>
17701767
: {}
17711768
>(
17721769
options: Options,

packages/vue-i18n-core/src/i18n.ts

Lines changed: 14 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -481,23 +481,20 @@ export function createI18n<
481481
SchemaParams<Schema, VueMessageType>,
482482
LocaleParams<Locales>
483483
> = I18nOptions<SchemaParams<Schema, VueMessageType>, LocaleParams<Locales>>,
484-
Messages extends Record<string, unknown> = Options['messages'] extends Record<
485-
string,
486-
unknown
487-
>
488-
? Options['messages']
484+
Messages extends Record<string, unknown> = NonNullable<
485+
Options['messages']
486+
> extends Record<string, unknown>
487+
? NonNullable<Options['messages']>
489488
: {},
490-
DateTimeFormats extends Record<
491-
string,
492-
unknown
493-
> = Options['datetimeFormats'] extends Record<string, unknown>
494-
? Options['datetimeFormats']
489+
DateTimeFormats extends Record<string, unknown> = NonNullable<
490+
Options['datetimeFormats']
491+
> extends Record<string, unknown>
492+
? NonNullable<Options['datetimeFormats']>
495493
: {},
496-
NumberFormats extends Record<
497-
string,
498-
unknown
499-
> = Options['numberFormats'] extends Record<string, unknown>
500-
? Options['numberFormats']
494+
NumberFormats extends Record<string, unknown> = NonNullable<
495+
Options['numberFormats']
496+
> extends Record<string, unknown>
497+
? NonNullable<Options['numberFormats']>
501498
: {},
502499
OptionLocale = Options['locale'] extends string ? Options['locale'] : Locale
503500
>(
@@ -731,7 +728,7 @@ export function useI18n<Options extends UseI18nOptions = UseI18nOptions>(
731728
NonNullable<Options['messages']>,
732729
NonNullable<Options['datetimeFormats']>,
733730
NonNullable<Options['numberFormats']>,
734-
NonNullable<Options['locale']>
731+
Options['locale'] extends unknown ? string : Options['locale']
735732
>
736733

737734
/**
@@ -803,7 +800,7 @@ export function useI18n<
803800
NonNullable<Options['messages']>,
804801
NonNullable<Options['datetimeFormats']>,
805802
NonNullable<Options['numberFormats']>,
806-
NonNullable<Options['locale']>
803+
Options['locale'] extends unknown ? string : Options['locale']
807804
>
808805
// eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types
809806
export function useI18n<

packages/vue-i18n-core/src/legacy.ts

Lines changed: 12 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1439,23 +1439,20 @@ export function createVueI18n<
14391439
SchemaParams<Schema, VueMessageType>,
14401440
LocaleParams<Locales>
14411441
>,
1442-
Messages extends Record<string, any> = Options['messages'] extends Record<
1443-
string,
1444-
any
1445-
>
1446-
? Options['messages']
1442+
Messages extends Record<string, any> = NonNullable<
1443+
Options['messages']
1444+
> extends Record<string, any>
1445+
? NonNullable<Options['messages']>
14471446
: {},
1448-
DateTimeFormats extends Record<
1449-
string,
1450-
any
1451-
> = Options['datetimeFormats'] extends Record<string, any>
1452-
? Options['datetimeFormats']
1447+
DateTimeFormats extends Record<string, any> = NonNullable<
1448+
Options['datetimeFormats']
1449+
> extends Record<string, any>
1450+
? NonNullable<Options['datetimeFormats']>
14531451
: {},
1454-
NumberFormats extends Record<
1455-
string,
1456-
any
1457-
> = Options['numberFormats'] extends Record<string, any>
1458-
? Options['numberFormats']
1452+
NumberFormats extends Record<string, any> = NonNullable<
1453+
Options['numberFormats']
1454+
> extends Record<string, any>
1455+
? NonNullable<Options['numberFormats']>
14591456
: {}
14601457
>(
14611458
options?: Options,

pnpm-lock.yaml

Lines changed: 8 additions & 13 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

test-d/runtime.test-d.ts renamed to test-d/core-base/runtime.test-d.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
/* eslint-disable @typescript-eslint/no-explicit-any */
2-
import { expectType } from './index'
3-
import { MessageType } from '../packages/runtime/dist/runtime'
2+
import { expectType } from '../index'
3+
import { MessageType } from '../../packages/core-base/src'
44

55
/**
66
* Message Type

test-d/vue-i18n/i18n.test-d.ts

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -249,6 +249,13 @@ const globalComposer = useI18n<[ResourceSchema], 'en' | 'ja'>({
249249
useScope: 'global'
250250
})
251251
expect<string>(globalComposer.t('nest.bar', { foo: 1 }, { locale: 'ja' }))
252+
expect<'en' | 'ja'>(globalComposer.locale.value)
253+
254+
// no annotation
255+
const localComposer = useI18n({
256+
useScope: 'local'
257+
})
258+
expect<string>(localComposer.locale.value)
252259

253260
expectType<I18nOptions>(looseOptions)
254261
expectType<

0 commit comments

Comments
 (0)