Файлы переводов обычно выглядят так:
const en = {
screen1: {
description: 'Some description'
},
screen2: {
plural: {
one: 'One day remaining',
other: '%{count} days remaining'
}
}
}
i18n-js, например, принимает ключ / область действия, например, translate('screen1.description').
С помощью этих вопрос и ts-toolbelt можно создать тип с точечной нотацией, представляющей все листья.
Однако в случае множественного числа вам понадобится только ключ screen2.plural, который будет передан в функцию translate.
Я попытался ввести новый тип:
interface Plurals {
[key: string]: string
}
plural: {
one: 'One day remaining',
other: '%{count} days remaining'
} as Plurals
но не смог отфильтровать или остановиться на желаемом ключе plural, потому что тип самого объекта не известен в приведенных выше примерах.
Это вообще возможно?
Заранее спасибо.
Я имею в виду, работает ли что-нибудь из эти для вас? Если да, напишу ответ. Если нет, я думаю, я не понимаю, как вы ожидаете, что компилятор распознает, где находятся «множественные» объекты. и мне нужно больше минимальный воспроизводимый пример здесь.
Ключ plural является примером и может иметь любое произвольное имя (daysRemaining, numberOfAlbums и т. д.). i18n-js действительно определяет набор по умолчанию свойств, но, вероятно, также может включать few или many. На практике у вас может быть несколько ключей перевода, которые содержат определение множественного числа. Я ожидал, что компилятор увидит тип как есть, но поскольку он не является номинальным, вероятно, нет другого способа, кроме как сгладить весь объект и использовать только подход keyof typeof languageObject.
Итак, какой ответ вы хотели бы здесь видеть? Я счастлив написать один из них, но я не могу сказать, какие из упомянутых мною подходов подходят. Похоже, что «имитация номинального набора текста» - единственное, что вы можете использовать как есть. Но если для вас это неприемлемо, то, по-видимому, «это невозможно, извините» - единственный ответ. Дай мне знать.






Ваш тип
Pluralsнелегко отличить от других типов, чтобы быть полезным. Система типов TypeScript - структурный, а не номинальная, поэтому компилятор увидит, что множество вещей присваиваетсяPlurals. С прагматической точки зрения, как можно обнаружить такое множественное число без TypeScript? Всегда ли они на ключе с именемplural? Всегда ли у них есть свойства с именамиoneиother? Предположительно, что-то иное, чем «объект со строковыми свойствами».