import * as error from './cs/error.json'; /* // Content of a "./cs/error.json" file { "general": { "unexpected": "Došlo k neočekávané chybě." }, "unauthorized": { "token": "Váš přístup byl zamítnut, nevalidní token." } } */ type Prev = [never, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, ...0[]]; type PathsWithStringValue = [D] extends [never] ? never : T extends string ? [] : { [K in Extract]: [K, ...PathsWithStringValue]; }[Extract]; type Join = T extends [] ? never : T extends [infer F] ? F : T extends [infer F, ...infer R] ? F extends string ? `${F}${D}${Join, D>}` : never : string; type DottedStringPaths = Join, '.'>; export type ErrorTranslationPath = `error.${DottedStringPaths}`; let transErrorId: ErrorTranslationPath; transErrorId = 'error.general.unexpected' // OK transErrorId = 'error.general' // Error, `general` is not a string value transErrorId = 'error.unauthorized' // Error, `unauthorized` is not a string value transErrorId = 'error.unauthorized.token' // OK