diff --git a/packages/i18n/src/index.tsx b/packages/i18n/src/index.tsx index 118b2855..3da841d8 100644 --- a/packages/i18n/src/index.tsx +++ b/packages/i18n/src/index.tsx @@ -11,7 +11,9 @@ import type { LocaleMessageMaps, PrimitiveType } from './types'; /** * */ -const createI18n = (messageObj: LocaleMessageMaps) => { +const createI18n = >( + messageObj: LocaleMessageMaps, +) => { const IntlProvider: FC = ({ children }) => { const { locale, messages } = useLocaleMessages(messageObj); return ( @@ -22,7 +24,7 @@ const createI18n = (messageObj: LocaleMessageMaps) => { }; const useFormatMessage = (): (( - id: keyof LocaleMessageMaps['zh-CN'], + id: keyof T, values?: Record, ) => string) => { const intl = useIntl(); diff --git a/packages/i18n/src/types.ts b/packages/i18n/src/types.ts index c15a870d..7d7a2944 100644 --- a/packages/i18n/src/types.ts +++ b/packages/i18n/src/types.ts @@ -1,10 +1,8 @@ export type LocalesType = 'en-US' | 'zh-CN'; -export type MessageObj = Record; - -export type LocaleMessageMaps = { - 'zh-CN': MessageObj; - 'en-US'?: MessageObj; +export type LocaleMessageMaps> = { + 'zh-CN': T; + 'en-US'?: T; }; export type { PrimitiveType } from 'intl-messageformat'; diff --git a/packages/i18n/tests/index.test.tsx b/packages/i18n/tests/index.test.tsx index 448c5ef5..be1bfea4 100644 --- a/packages/i18n/tests/index.test.tsx +++ b/packages/i18n/tests/index.test.tsx @@ -3,15 +3,16 @@ import { act, findByTestId, render } from '@testing-library/react'; import { renderHook } from '@testing-library/react-hooks'; import createI18n from '@arvinxu/i18n'; -import type { LocaleMessageMaps } from '@arvinxu/i18n'; const zhCN = { hello: '你好', + good: '好', }; const en = { hello: 'hello', + good: 'good', }; -const locales: LocaleMessageMaps = { +const locales = { 'zh-CN': zhCN, 'en-US': en, };