Lang: Remove some duplication in types (#6712)
This commit is contained in:
parent
1c16982b61
commit
b5903e9594
@ -47,6 +47,27 @@ export type AdvancedLangFnOptions = AdvancedLangFnOptionsRegular | AdvancedLangF
|
|||||||
type LangPairWithNodes = LangPairWithVariables<TeactNode | undefined>;
|
type LangPairWithNodes = LangPairWithVariables<TeactNode | undefined>;
|
||||||
type LangPairPluralWithNodes = LangPairPluralWithVariables<TeactNode | undefined>;
|
type LangPairPluralWithNodes = LangPairPluralWithVariables<TeactNode | undefined>;
|
||||||
|
|
||||||
|
// Helpers for merged overloads
|
||||||
|
type AllKeysOf<T> = T extends any ? keyof T : never;
|
||||||
|
|
||||||
|
type AnyLangOptions = LangFnOptions | AdvancedLangFnOptions;
|
||||||
|
type AnyLangPluralOptions = LangFnOptionsWithPlural | AdvancedLangFnOptionsWithPlural;
|
||||||
|
|
||||||
|
// Maps unknown option keys to `never`, catching typos even through generics
|
||||||
|
type StrictLangOptions<O> = O & Record<Exclude<keyof O & string, AllKeysOf<AnyLangOptions>>, never>;
|
||||||
|
|
||||||
|
type LangFnReturnType<O> = O extends AdvancedLangFnOptions ? TeactNode : string;
|
||||||
|
|
||||||
|
type PrepVariablesType<K extends RegularLangKeyWithVariables, O> =
|
||||||
|
O extends AdvancedLangFnOptions
|
||||||
|
? LangPairWithNodes[K]
|
||||||
|
: LangPairWithVariables[K];
|
||||||
|
|
||||||
|
type PrepPluralVariablesType<K extends PluralLangKeyWithVariables, O> =
|
||||||
|
O extends AdvancedLangFnOptions
|
||||||
|
? LangPairPluralWithNodes[K]
|
||||||
|
: LangPairPluralWithVariables[K];
|
||||||
|
|
||||||
type RegularLangFnParametersWithoutVariables = {
|
type RegularLangFnParametersWithoutVariables = {
|
||||||
key: RegularLangKey;
|
key: RegularLangKey;
|
||||||
variables?: undefined;
|
variables?: undefined;
|
||||||
@ -122,31 +143,18 @@ export type AdvancedLangFnParameters =
|
|||||||
export type LangFnParameters = RegularLangFnParameters | AdvancedLangFnParameters;
|
export type LangFnParameters = RegularLangFnParameters | AdvancedLangFnParameters;
|
||||||
|
|
||||||
export type LangFn = {
|
export type LangFn = {
|
||||||
<K extends RegularLangKey = RegularLangKey>(
|
<K extends PluralLangKeyWithVariables, O extends AnyLangPluralOptions>(
|
||||||
key: K, variables?: undefined, options?: LangFnOptions,
|
key: K, variables: PrepPluralVariablesType<K, O>, options: StrictLangOptions<O>,
|
||||||
): string;
|
): LangFnReturnType<O>;
|
||||||
<K extends PluralLangKey = PluralLangKey>(
|
<K extends RegularLangKeyWithVariables, O extends AnyLangOptions = LangFnOptionsRegular>(
|
||||||
key: K, variables: undefined, options: LangFnOptionsWithPlural,
|
key: K, variables: PrepVariablesType<K, O>, options?: StrictLangOptions<O>,
|
||||||
): string;
|
): LangFnReturnType<O>;
|
||||||
<K extends RegularLangKeyWithVariables = RegularLangKeyWithVariables>(
|
<K extends PluralLangKey, O extends AnyLangPluralOptions>(
|
||||||
key: K, variables: LangPairWithVariables[K], options?: LangFnOptions,
|
key: K, variables: undefined, options: StrictLangOptions<O>,
|
||||||
): string;
|
): LangFnReturnType<O>;
|
||||||
<K extends PluralLangKeyWithVariables = PluralLangKeyWithVariables>(
|
<K extends RegularLangKey, O extends AnyLangOptions = LangFnOptionsRegular>(
|
||||||
key: K, variables: LangPairPluralWithVariables[K], options: LangFnOptionsWithPlural,
|
key: K, variables?: undefined, options?: StrictLangOptions<O>,
|
||||||
): string;
|
): LangFnReturnType<O>;
|
||||||
|
|
||||||
<K extends RegularLangKey = RegularLangKey>(
|
|
||||||
key: K, variables?: undefined, options?: AdvancedLangFnOptions,
|
|
||||||
): TeactNode;
|
|
||||||
<K extends PluralLangKey = PluralLangKey>(
|
|
||||||
key: K, variables: undefined, options: AdvancedLangFnOptionsWithPlural,
|
|
||||||
): TeactNode;
|
|
||||||
<K extends RegularLangKeyWithVariables = RegularLangKeyWithVariables>(
|
|
||||||
key: K, variables: LangPairWithVariables<TeactNode | undefined>[K], options: AdvancedLangFnOptions,
|
|
||||||
): TeactNode;
|
|
||||||
<K extends PluralLangKeyWithVariables = PluralLangKeyWithVariables>(
|
|
||||||
key: K, variables: LangPairPluralWithVariables<TeactNode | undefined>[K], options: AdvancedLangFnOptionsWithPlural,
|
|
||||||
): TeactNode;
|
|
||||||
|
|
||||||
with: (params: LangFnParameters) => TeactNode;
|
with: (params: LangFnParameters) => TeactNode;
|
||||||
withRegular: (params: RegularLangFnParameters) => string;
|
withRegular: (params: RegularLangFnParameters) => string;
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user