@@ -39,6 +39,21 @@ export type TranslatorInitOptions = {
3939 onLanguageChange ?: LanguageChangeHandler | null ;
4040} ;
4141
42+ /** @public */
43+ export type TranslatorInstance < T extends { [ key : string ] : unknown } > = {
44+ changeLanguage ( language : Language ) : void ;
45+ init ( options ?: TranslatorInitOptions ) : void ;
46+ readonly isInitialized : boolean ;
47+ onLanguageChange : LanguageChangeHandler ;
48+ readonly resolvedLanguage : Language ;
49+ t ( key : TranslationKey < T > ) : string ;
50+ } ;
51+
52+ /** @public */
53+ export type TranslatorConstructor = new < T extends { [ key : string ] : unknown } > (
54+ options : TranslatorOptions < T >
55+ ) => TranslatorInstance < T > ;
56+
4257/** @public */
4358export abstract class BaseTranslator < T extends { [ key : string ] : unknown } = { [ key : string ] : unknown } > {
4459 protected currentDocumentLanguage : Language | null ;
@@ -116,7 +131,10 @@ export abstract class BaseTranslator<T extends { [key: string]: unknown } = { [k
116131}
117132
118133/** @public */
119- export class SynchronizedTranslator < T extends { [ key : string ] : unknown } > extends BaseTranslator < T > {
134+ export class SynchronizedTranslator < T extends { [ key : string ] : unknown } >
135+ extends BaseTranslator < T >
136+ implements TranslatorInstance < T >
137+ {
120138 constructor ( options : TranslatorOptions < T > ) {
121139 super ( options ) ;
122140 }
@@ -139,7 +157,10 @@ export class SynchronizedTranslator<T extends { [key: string]: unknown }> extend
139157}
140158
141159/** @public */
142- export class StandaloneTranslator < T extends { [ key : string ] : unknown } > extends BaseTranslator < T > {
160+ export class StandaloneTranslator < T extends { [ key : string ] : unknown } >
161+ extends BaseTranslator < T >
162+ implements TranslatorInstance < T >
163+ {
143164 @InitializedOnly
144165 changeLanguage ( language : Language ) {
145166 document . documentElement . setAttribute ( 'lang' , language ) ;
@@ -154,7 +175,7 @@ export class StandaloneTranslator<T extends { [key: string]: unknown }> extends
154175}
155176
156177/** @public */
157- let Translator : typeof BaseTranslator ;
178+ let Translator : TranslatorConstructor ;
158179if ( typeof window === 'undefined' || window . self !== window . top ) {
159180 Translator = SynchronizedTranslator ;
160181} else {
0 commit comments