Created
August 2, 2020 03:06
-
-
Save antfu/e2dc40e09bb1e8a263c471dd4901f8fa to your computer and use it in GitHub Desktop.
This file contains 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
type Proxy = any[] | |
type Pop<T> = T extends [infer A, ...infer B] ? B : never | |
type Push<T> = T extends [...infer B] ? [any, ...B] : never | |
type Add<T extends Proxy, V extends Proxy> = [...T, ...V] | |
type Double<T extends Proxy> = [...T, ...T] | |
type Get<A extends Proxy> = A['length'] | |
type AddOne<A extends Proxy> = Push<A> | |
type SubOne<A extends Proxy> = Pop<A> | |
type Zero = [] | |
type InnerN<T extends number, V extends Proxy = Zero> = { | |
'true': V | |
'false': InnerN<T, AddOne<V>> | |
}[Get<V> extends T ? 'true' : 'false']; | |
type LIMIT = 1 | |
type N<T extends number> = InnerN<T>; | |
type n1 = N<44> | |
type n2 = Double<n1> | |
type n3 = Double<n2> | |
type n4 = Double<n3> | |
type n5 = Double<n4> | |
type n6 = Double<n5> | |
type n7 = Double<n6> | |
type v = Get<n7> |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment