typescript - התגברת על i18next TFunction באמצעות enum מקובץ אחר
אני מנסה להחליף את ה-TFunction של חבילת i18next.
מה שאני מנסה להשיג הוא הבטחת הקלדה של מפתחות ה-i18n שבהם משתמשים כך:
t('invalid-key') // is invalid
t('key1') // is valid
אז יצרתי את הקובץ הבא i18next.d.ts כדי לשנות את סוג ה-TFunction:
type Keys = 'key1' | 'key2'
declare module 'i18next' {
export type TFunction = (key: Keys) => string
}
זה עובד אבל ברגע שאני מנסה לייבא את הסוג הזה מקובץ אחר, הסוג TFunction חוזר להיות המקורי.
האם למישהו יש רמז שיעזור לי לייבא את המפתחות בקובץ ההצהרה?
לצערי, ייבוא עובד כאשר אני עושה זאת דרך הקריאה useTranslation של חבילת react-i18next:
import { I18nKey } from '../modules/core/i18n/i18nKey'
declare module 'react-i18next' {
export function useTranslation(): {
t: (key: I18nKey) => string
}
}
תשובה #1
אם אתה מייצא Keys בקובץ ההצהרה, קובץ ההצהרה יהפוך למודול. זה גורם ל-TypeScript לא לכלול את הקובץ באופן גלובלי. צור קובץ נפרד עבור ה-declare module כדי לכלול אותו באופן גלובלי.
אם אתה רוצה לייבא בקובץ גלובלי שמכריז על מודול, עליך לייבא אותם בתוך המודול ככה.
declare module 'react-i18next' {
import { I18nKey } from '../modules/core/i18n/i18nKey'
export function useTranslation(): {
t: (key: I18nKey) => string
}
}
