Skip to content

Instantly share code, notes, and snippets.

@genki
Created October 16, 2024 23:48
Show Gist options
  • Save genki/384fe04b11dba831ef18849139283a77 to your computer and use it in GitHub Desktop.
Save genki/384fe04b11dba831ef18849139283a77 to your computer and use it in GitHub Desktop.
Type alias definition of overloaded functions
const translator = <Result extends string|Promise<string>>() => {
type A = any[];
function t(s?:TranslateOptions):
(s:TemplateStringsArray, ...values:A) => Result;
function t(s:string,...values:A):(s:string, ...values:A) => Result;
function t(n:number|Signal<number>, s?:TranslateOptions):
(s:TemplateStringsArray, ...values:A) => Result;
function t(n:number|Signal<number>, s?:TranslateOptions):
(s:string, ...values:A) => Result;
function t(s:TemplateStringsArray, ...values:A):Result;
function t(
this:TranslateOptions,
_s_?:number|Signal<number>|string|TranslateOptions|TemplateStringsArray,
..._values_:A
):
| Result
| ((s:TemplateStringsArray, ...values:A) => Result)
| ((s:string, ...values:A) => Result)
{ throw Error("Don't call") }
return t;
};
type Translator<Result extends string|Promise<string>> =
ReturnType<typeof translator<Result>>;
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment