Skip to content

Commit 5ec1164

Browse files
author
Paritosh Maurya
committed
Added type safety
1 parent d44886c commit 5ec1164

File tree

3 files changed

+51
-9
lines changed

3 files changed

+51
-9
lines changed

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

Lines changed: 14 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1203,13 +1203,18 @@ export interface ComposerNumberFormatting<
12031203
*
12041204
* @returns Formatted value
12051205
*/
1206-
<Key extends string = string>(
1206+
<
1207+
Key extends string = string,
1208+
Return extends string | Intl.NumberFormatPart[] =
1209+
| string
1210+
| Intl.NumberFormatPart[]
1211+
>(
12071212
value: number,
12081213
keyOrOptions:
12091214
| Key
12101215
| ResourceKeys
12111216
| NumberOptions<Key | ResourceKeys, Locales>
1212-
): string | Intl.NumberFormatPart[]
1217+
): Return
12131218
/**
12141219
* Number Formatting
12151220
*
@@ -1224,14 +1229,19 @@ export interface ComposerNumberFormatting<
12241229
*
12251230
* @returns Formatted value
12261231
*/
1227-
<Key extends string = string>(
1232+
<
1233+
Key extends string = string,
1234+
Return extends string | Intl.NumberFormatPart[] =
1235+
| string
1236+
| Intl.NumberFormatPart[]
1237+
>(
12281238
value: number,
12291239
keyOrOptions:
12301240
| Key
12311241
| ResourceKeys
12321242
| NumberOptions<Key | ResourceKeys, Locales>,
12331243
locale: Locales
1234-
): string | Intl.NumberFormatPart[]
1244+
): Return
12351245
}
12361246

12371247
/**

packages/vue-i18n-core/test/composer.test-d.ts

Lines changed: 21 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -357,8 +357,27 @@ test('strict composer with direct options', () => {
357357
string | Intl.NumberFormatPart[]
358358
>()
359359
expectTypeOf(
360-
strictDirectComposer.n(1, { key: 'currency', locale: 'en' })
361-
).toEqualTypeOf<string | Intl.NumberFormatPart[]>()
360+
strictDirectComposer.n<string, string>(1, 'currency', 'zh')
361+
).toEqualTypeOf<string>()
362+
expectTypeOf(
363+
strictDirectComposer.n<string, string>(1, { key: 'currency', locale: 'en' })
364+
).toEqualTypeOf<string>()
365+
expectTypeOf(
366+
strictDirectComposer.n<string, string>(1, { key: 'currency', locale: 'en' })
367+
).toEqualTypeOf<string>()
368+
expectTypeOf(
369+
strictDirectComposer.n<string, Intl.NumberFormatPart[]>(1, {
370+
key: 'currency',
371+
locale: 'en',
372+
part: true
373+
})
374+
).toEqualTypeOf<Intl.NumberFormatPart[]>()
375+
expectTypeOf(strictDirectComposer.n(1, 'currency')).toEqualTypeOf<
376+
string | Intl.NumberFormatPart[]
377+
>()
378+
expectTypeOf(
379+
strictDirectComposer.n<string, string>(1, 'currency')
380+
).toEqualTypeOf<string>()
362381
expectTypeOf(strictDirectComposer.n(1, 'custom' as any)).toEqualTypeOf<
363382
string | Intl.NumberFormatPart[]
364383
>()

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

Lines changed: 16 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -865,10 +865,23 @@ declare module 'vue' {
865865
*
866866
* @returns formatted value
867867
*/
868-
$n<OptionsType extends NumberOptions>(
868+
$n<
869+
Key extends string,
870+
Return extends string | Intl.NumberFormatPart[] =
871+
| string
872+
| Intl.NumberFormatPart[],
873+
DefinedNumberFormat extends
874+
RemovedIndexResources<DefineDateTimeFormat> = RemovedIndexResources<DefineDateTimeFormat>,
875+
Keys = IsEmptyObject<DefinedNumberFormat> extends false
876+
? PickupFormatPathKeys<{
877+
[K in keyof DefinedNumberFormat]: DefinedNumberFormat[K]
878+
}>
879+
: never,
880+
ResourceKeys extends Keys = IsNever<Keys> extends false ? Keys : never
881+
>(
869882
value: number,
870-
options: OptionsType
871-
): OptionsType['type'] extends true ? Intl.NumberFormatPart[] : string
883+
options: NumberOptions<Key, ResourceKeys>
884+
): Return
872885
/**
873886
* Locale messages getter
874887
*

0 commit comments

Comments
 (0)