Skip to content

Instantly share code, notes, and snippets.

@weswigham
Created May 22, 2019 18:17
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save weswigham/1d0564caf845f0c27c8314855dbd52aa to your computer and use it in GitHub Desktop.
Save weswigham/1d0564caf845f0c27c8314855dbd52aa to your computer and use it in GitHub Desktop.
interface Obj<T> {
ref: T;
}
interface Func<T> {
(x: T): void;
}
type CtorOf<T> = T extends unknown ? (x: T) => T : never;
interface Big {
"0": { common?: string; "0"?: number, ref?: Obj<Big["0"]> | Func<Big["0"]>; }
"1": { common?: string; "1"?: number, ref?: Obj<Big["1"]> | Func<Big["1"]>; }
"2": { common?: string; "2"?: number, ref?: Obj<Big["2"]> | Func<Big["2"]>; }
"3": { common?: string; "3"?: number, ref?: Obj<Big["3"]> | Func<Big["3"]>; }
"4": { common?: string; "4"?: number, ref?: Obj<Big["4"]> | Func<Big["4"]>; }
"5": { common?: string; "5"?: number, ref?: Obj<Big["5"]> | Func<Big["5"]>; }
"6": { common?: string; "6"?: number, ref?: Obj<Big["6"]> | Func<Big["6"]>; }
"7": { common?: string; "7"?: number, ref?: Obj<Big["7"]> | Func<Big["7"]>; }
"8": { common?: string; "8"?: number, ref?: Obj<Big["8"]> | Func<Big["8"]>; }
"9": { common?: string; "9"?: number, ref?: Obj<Big["9"]> | Func<Big["9"]>; }
"10": { common?: string; "10"?: number, ref?: Obj<Big["10"]> | Func<Big["10"]>; }
"11": { common?: string; "11"?: number, ref?: Obj<Big["11"]> | Func<Big["11"]>; }
"12": { common?: string; "12"?: number, ref?: Obj<Big["12"]> | Func<Big["12"]>; }
"13": { common?: string; "13"?: number, ref?: Obj<Big["13"]> | Func<Big["13"]>; }
"14": { common?: string; "14"?: number, ref?: Obj<Big["14"]> | Func<Big["14"]>; }
"15": { common?: string; "15"?: number, ref?: Obj<Big["15"]> | Func<Big["15"]>; }
"16": { common?: string; "16"?: number, ref?: Obj<Big["16"]> | Func<Big["16"]>; }
"17": { common?: string; "17"?: number, ref?: Obj<Big["17"]> | Func<Big["17"]>; }
"18": { common?: string; "18"?: number, ref?: Obj<Big["18"]> | Func<Big["18"]>; }
"19": { common?: string; "19"?: number, ref?: Obj<Big["19"]> | Func<Big["19"]>; }
"20": { common?: string; "20"?: number, ref?: Obj<Big["20"]> | Func<Big["20"]>; }
"21": { common?: string; "21"?: number, ref?: Obj<Big["21"]> | Func<Big["21"]>; }
"22": { common?: string; "22"?: number, ref?: Obj<Big["22"]> | Func<Big["22"]>; }
"23": { common?: string; "23"?: number, ref?: Obj<Big["23"]> | Func<Big["23"]>; }
"24": { common?: string; "24"?: number, ref?: Obj<Big["24"]> | Func<Big["24"]>; }
"25": { common?: string; "25"?: number, ref?: Obj<Big["25"]> | Func<Big["25"]>; }
"26": { common?: string; "26"?: number, ref?: Obj<Big["26"]> | Func<Big["26"]>; }
"27": { common?: string; "27"?: number, ref?: Obj<Big["27"]> | Func<Big["27"]>; }
"28": { common?: string; "28"?: number, ref?: Obj<Big["28"]> | Func<Big["28"]>; }
"29": { common?: string; "29"?: number, ref?: Obj<Big["29"]> | Func<Big["29"]>; }
"30": { common?: string; "30"?: number, ref?: Obj<Big["30"]> | Func<Big["30"]>; }
"31": { common?: string; "31"?: number, ref?: Obj<Big["31"]> | Func<Big["31"]>; }
"32": { common?: string; "32"?: number, ref?: Obj<Big["32"]> | Func<Big["32"]>; }
"33": { common?: string; "33"?: number, ref?: Obj<Big["33"]> | Func<Big["33"]>; }
"34": { common?: string; "34"?: number, ref?: Obj<Big["34"]> | Func<Big["34"]>; }
"35": { common?: string; "35"?: number, ref?: Obj<Big["35"]> | Func<Big["35"]>; }
"36": { common?: string; "36"?: number, ref?: Obj<Big["36"]> | Func<Big["36"]>; }
"37": { common?: string; "37"?: number, ref?: Obj<Big["37"]> | Func<Big["37"]>; }
"38": { common?: string; "38"?: number, ref?: Obj<Big["38"]> | Func<Big["38"]>; }
"39": { common?: string; "39"?: number, ref?: Obj<Big["39"]> | Func<Big["39"]>; }
"40": { common?: string; "40"?: number, ref?: Obj<Big["40"]> | Func<Big["40"]>; }
"41": { common?: string; "41"?: number, ref?: Obj<Big["41"]> | Func<Big["41"]>; }
"42": { common?: string; "42"?: number, ref?: Obj<Big["42"]> | Func<Big["42"]>; }
"43": { common?: string; "43"?: number, ref?: Obj<Big["43"]> | Func<Big["43"]>; }
"44": { common?: string; "44"?: number, ref?: Obj<Big["44"]> | Func<Big["44"]>; }
"45": { common?: string; "45"?: number, ref?: Obj<Big["45"]> | Func<Big["45"]>; }
"46": { common?: string; "46"?: number, ref?: Obj<Big["46"]> | Func<Big["46"]>; }
"47": { common?: string; "47"?: number, ref?: Obj<Big["47"]> | Func<Big["47"]>; }
"48": { common?: string; "48"?: number, ref?: Obj<Big["48"]> | Func<Big["48"]>; }
"49": { common?: string; "49"?: number, ref?: Obj<Big["49"]> | Func<Big["49"]>; }
"50": { common?: string; "50"?: number, ref?: Obj<Big["50"]> | Func<Big["50"]>; }
"51": { common?: string; "51"?: number, ref?: Obj<Big["51"]> | Func<Big["51"]>; }
"52": { common?: string; "52"?: number, ref?: Obj<Big["52"]> | Func<Big["52"]>; }
"53": { common?: string; "53"?: number, ref?: Obj<Big["53"]> | Func<Big["53"]>; }
"54": { common?: string; "54"?: number, ref?: Obj<Big["54"]> | Func<Big["54"]>; }
"55": { common?: string; "55"?: number, ref?: Obj<Big["55"]> | Func<Big["55"]>; }
"56": { common?: string; "56"?: number, ref?: Obj<Big["56"]> | Func<Big["56"]>; }
"57": { common?: string; "57"?: number, ref?: Obj<Big["57"]> | Func<Big["57"]>; }
"58": { common?: string; "58"?: number, ref?: Obj<Big["58"]> | Func<Big["58"]>; }
"59": { common?: string; "59"?: number, ref?: Obj<Big["59"]> | Func<Big["59"]>; }
"60": { common?: string; "60"?: number, ref?: Obj<Big["60"]> | Func<Big["60"]>; }
"61": { common?: string; "61"?: number, ref?: Obj<Big["61"]> | Func<Big["61"]>; }
"62": { common?: string; "62"?: number, ref?: Obj<Big["62"]> | Func<Big["62"]>; }
"63": { common?: string; "63"?: number, ref?: Obj<Big["63"]> | Func<Big["63"]>; }
"64": { common?: string; "64"?: number, ref?: Obj<Big["64"]> | Func<Big["64"]>; }
"65": { common?: string; "65"?: number, ref?: Obj<Big["65"]> | Func<Big["65"]>; }
"66": { common?: string; "66"?: number, ref?: Obj<Big["66"]> | Func<Big["66"]>; }
"67": { common?: string; "67"?: number, ref?: Obj<Big["67"]> | Func<Big["67"]>; }
"68": { common?: string; "68"?: number, ref?: Obj<Big["68"]> | Func<Big["68"]>; }
"69": { common?: string; "69"?: number, ref?: Obj<Big["69"]> | Func<Big["69"]>; }
"70": { common?: string; "70"?: number, ref?: Obj<Big["70"]> | Func<Big["70"]>; }
"71": { common?: string; "71"?: number, ref?: Obj<Big["71"]> | Func<Big["71"]>; }
"72": { common?: string; "72"?: number, ref?: Obj<Big["72"]> | Func<Big["72"]>; }
"73": { common?: string; "73"?: number, ref?: Obj<Big["73"]> | Func<Big["73"]>; }
"74": { common?: string; "74"?: number, ref?: Obj<Big["74"]> | Func<Big["74"]>; }
"75": { common?: string; "75"?: number, ref?: Obj<Big["75"]> | Func<Big["75"]>; }
"76": { common?: string; "76"?: number, ref?: Obj<Big["76"]> | Func<Big["76"]>; }
"77": { common?: string; "77"?: number, ref?: Obj<Big["77"]> | Func<Big["77"]>; }
"78": { common?: string; "78"?: number, ref?: Obj<Big["78"]> | Func<Big["78"]>; }
"79": { common?: string; "79"?: number, ref?: Obj<Big["79"]> | Func<Big["79"]>; }
"80": { common?: string; "80"?: number, ref?: Obj<Big["80"]> | Func<Big["80"]>; }
"81": { common?: string; "81"?: number, ref?: Obj<Big["81"]> | Func<Big["81"]>; }
"82": { common?: string; "82"?: number, ref?: Obj<Big["82"]> | Func<Big["82"]>; }
"83": { common?: string; "83"?: number, ref?: Obj<Big["83"]> | Func<Big["83"]>; }
"84": { common?: string; "84"?: number, ref?: Obj<Big["84"]> | Func<Big["84"]>; }
"85": { common?: string; "85"?: number, ref?: Obj<Big["85"]> | Func<Big["85"]>; }
"86": { common?: string; "86"?: number, ref?: Obj<Big["86"]> | Func<Big["86"]>; }
"87": { common?: string; "87"?: number, ref?: Obj<Big["87"]> | Func<Big["87"]>; }
"88": { common?: string; "88"?: number, ref?: Obj<Big["88"]> | Func<Big["88"]>; }
"89": { common?: string; "89"?: number, ref?: Obj<Big["89"]> | Func<Big["89"]>; }
"90": { common?: string; "90"?: number, ref?: Obj<Big["90"]> | Func<Big["90"]>; }
"91": { common?: string; "91"?: number, ref?: Obj<Big["91"]> | Func<Big["91"]>; }
"92": { common?: string; "92"?: number, ref?: Obj<Big["92"]> | Func<Big["92"]>; }
"93": { common?: string; "93"?: number, ref?: Obj<Big["93"]> | Func<Big["93"]>; }
"94": { common?: string; "94"?: number, ref?: Obj<Big["94"]> | Func<Big["94"]>; }
"95": { common?: string; "95"?: number, ref?: Obj<Big["95"]> | Func<Big["95"]>; }
"96": { common?: string; "96"?: number, ref?: Obj<Big["96"]> | Func<Big["96"]>; }
"97": { common?: string; "97"?: number, ref?: Obj<Big["97"]> | Func<Big["97"]>; }
"98": { common?: string; "98"?: number, ref?: Obj<Big["98"]> | Func<Big["98"]>; }
"99": { common?: string; "99"?: number, ref?: Obj<Big["99"]> | Func<Big["99"]>; }
"100": { common?: string; "100"?: number, ref?: Obj<Big["100"]> | Func<Big["100"]>; }
"101": { common?: string; "101"?: number, ref?: Obj<Big["101"]> | Func<Big["101"]>; }
"102": { common?: string; "102"?: number, ref?: Obj<Big["102"]> | Func<Big["102"]>; }
"103": { common?: string; "103"?: number, ref?: Obj<Big["103"]> | Func<Big["103"]>; }
"104": { common?: string; "104"?: number, ref?: Obj<Big["104"]> | Func<Big["104"]>; }
"105": { common?: string; "105"?: number, ref?: Obj<Big["105"]> | Func<Big["105"]>; }
"106": { common?: string; "106"?: number, ref?: Obj<Big["106"]> | Func<Big["106"]>; }
"107": { common?: string; "107"?: number, ref?: Obj<Big["107"]> | Func<Big["107"]>; }
"108": { common?: string; "108"?: number, ref?: Obj<Big["108"]> | Func<Big["108"]>; }
"109": { common?: string; "109"?: number, ref?: Obj<Big["109"]> | Func<Big["109"]>; }
}
declare function getCtor<T extends keyof Big>(comp: T): CtorOf<Big[T]>;
declare var all: keyof Big;
const ctor = getCtor(all);
const comp = ctor({ common: "ok", ref: x => console.log(x) });
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment