Created
May 22, 2019 18:17
-
-
Save weswigham/1d0564caf845f0c27c8314855dbd52aa to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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