type AnyOf<T extends readonly any[]> = T[number] extends null | undefined |0 | '' | false | [] | {[key: string | number]: never} ? false : true;
Solution by vaclock #35835
type IsEmptyObject<T> = keyof T extends never ? true : false;
type Falsy<T> = T extends 0 | '' | false | undefined | null | [] ? true : IsEmptyObject<T> extends true ? true : false
type AnyOf<T extends readonly any[]> = 'true' extends keyof { [P in T[number] as Falsy<P> extends true ? never : 'true']: null} ? true : false
Solution by gangnamssal #35603
type AnyOf<T extends readonly any[]> = T[number] extends
| 0
| ''
| false
| []
| undefined
| null
| { [key: string]: never }
? false
: true;
Solution by RanungPark #35552
type AnyOf<T extends any[]> = T[number] extends 0 | '' | false | [] | {[key: string]: never} | undefined | null
? false
: true;
Solution by sesolaga #35466
type IsEmptyObject<T> = [T] extends [{}] ? keyof T extends never ? true : false : false
type Falsy = 0 | '' | false | undefined | null | []
type IsFalsy<T> = [T] extends [Falsy]
? true
: IsEmptyObject<T> extends true ? true : false;
type AnyOf<T extends readonly any[]> = T extends [infer First, ...infer Rest]
? IsFalsy<First> extends true
? AnyOf<Rest>
: true
: false
Solution by eunsukimme #35243
type Falsy = false | 0 | '' | [] | Record<string, never> | undefined | null;
type IsNever<T> = [T] extends [never] ? true : false;
type IsFalsy<T> = IsNever<T> extends true
? true
: T extends Falsy
? true
: false;
type AnyOf<T extends readonly any[]> = T extends [infer F, ...infer Rest] ? IsFalsy<F> extends true ? AnyOf<Rest> : true : false
Solution by wendao-liu #35172
I read some answers and I dont think they can be a real answer becase
Expect<Equal<AnyOf<[0, '', false, [], {}, undefined, null]>, false>>
Falsy
and I dont like itHere is my answer
type AnyOf<T extends readonly any[]> = T['length'] extends 0
? false
: T[number] extends true | NonNullable<Object>
? true
: false
Solution by Yaphet2015 #34993
// 你的答案
type AnyOf<T extends readonly any[]> = T extends [infer A, ...infer Rest]
? A extends 0 | "" | [] | { [key: string]: never } | false | undefined | null
? AnyOf<Rest>
: true
: false;
Solution by shx123qwe #34984
// your answers
type Falsy = 0 | '' | false | undefined | null | []
type AnyOf<T extends readonly any[]> = T extends [infer First, ...infer Rest]
? First extends Falsy
? AnyOf<Rest>
: keyof First extends never
? false
: true
: false
Solution by AndreGeng #34748
type Falsy = 0 | '' | false | [] | { [K in any]: never } | undefined | null;
type AnyOf<T extends readonly any[]> = T[number] extends Falsy ? false : true;
Solution by devshinthant #34615
// 你的答案
type AnyOf<T extends any[]> =
T[number] extends '' | false | 0 | [] | {[key: string]: never} | undefined | null ?
false : true;
Solution by Jayce-liang #34296
type AnyOf<T extends readonly any[]> = T[number] extends ('' | false | 0 | [] | {[key: string]: never} | undefined | null) ? false : true
Solution by ouzexi #34027
Bit different than other solutions that I saw. It also covers the problematic case that a lot of the older solutions don't get: Expect<Equal<AnyOf<[0, '', false, [], {}, undefined, null]>, false>>,
type AnyOf<T extends readonly any[]> = T extends [infer First, ...infer Rest]
? First extends 0 | '' | false | undefined | [] | {[key: string]: never} | null
? AnyOf<Rest> : true
: false
Solution by netr #33938
// 你的答案
type IsFalsy<T> =
T extends false | 0 | '' | [] | { [K in any]: never } | undefined | null
? true
: false;
type IsTrue<T> = IsFalsy<T> extends true ? false : true;
type Tuple2Union<T> = T extends any[] ? T[number] : T;
type AnyOf<T extends readonly any[]> = IsTrue<Tuple2Union<T>> extends true ? true : false;
Solution by HelloGGG #33419
// 你的答案
type A = 0 | "" | false | [] | { [key: string]: never };
type AnyOf<T extends Array<any>> = T extends [infer F, ...infer S] ? (F extends A ? AnyOf<S> : true) : false;
Solution by 2531800823 #33243
麻烦的解法,难点在于怎么组合空数组和空对象,然后非空打上true标记,空打上false标记,提取标记的数组类型再比较
type CodValue = 0 | '' | undefined | null | false;
type EmptyArray<T> = T extends any[] ? T['length'] extends 0 ? true : false : false;
type EmptyObject<T> = keyof T extends [never] ? true : false;
type Empty<T> = T extends any[] ? EmptyArray<T> : EmptyObject<T>;
type AnyOf<T extends readonly any[], A extends boolean[] = []> = T extends [infer F, ...infer R] ?
Empty<F> extends true ? AnyOf<R, [...A, false]> : F extends CodValue ? AnyOf<R, [...A, false]> : AnyOf<R, [...A, true]> : A['length'] extends 0 ? false : A extends Array<infer U>
? boolean extends U ? true : U : never;
Solution by rootdavid #32613
// your answers
type AnyOf<T extends any[]> = T[number] extends 0 | '' | false | [] | { [key: string]: never } | undefined | null ? false: true
Solution by pea-sys #32520
type IsFalsy<V> = V extends 0 | '' | false | [] | Record<keyof any, never> | undefined | null ? true : false
type AnyOf<T extends readonly unknown[]> =
T extends [infer V, ...infer R]
? IsFalsy<V> extends true
? AnyOf<R>
: true
: false
더 간결한 풀이
type AnyOf<T extends any[]> = T[number] extends 0 | '' | false | [] | {[key: string]: never}
? false : true;
Solution by dev-hobin #32419
type AnyOf < T extends readonly any[]> = { [key in keyof T]: T[key] extends False ? false : keyof T[key] extends never ? false :true }
Solution by T-33 #32037
type AnyOf<T extends readonly any[]> = T extends [infer First, ...infer Rest]
? First extends 0 | '' | false | [] | {} | undefined | null
? AnyOf<Rest>
: true
: false;
Solution by jinyoung234 #31966
type AnyOf<T extends readonly unknown[]> = undefined extends UnionFromTuple<T>
? false
: null extends UnionFromTuple<T>
? false
: UnionFromTuple<T> extends never
? false
: true;
Solution by gasmg #31895
type AnyOf<T extends readonly any[]> = T extends [infer A, ...infer R] ?
[{}] extends [A] ?
AnyOf<R>
: [A] extends [0 | '' | false | [] | null | undefined] ?
R extends [] ?
false :
AnyOf<R>
: true
: false;
Solution by jay0815 #31762
// 你的答案
type AnyOf<T extends readonly any[]> = T extends [infer F, ...infer Rest]
? F extends 0 | '' | false | [] | {[key:string]:never} | undefined | null
? AnyOf<Rest>
: true
: false
Solution by kingshdu #31697
type AnyOf<T extends readonly any[]> = T extends [infer F, ...infer Rest]
? Equal<F, {}> extends true ? AnyOf<Rest> : F extends Falsy ? AnyOf<Rest> : true
: false;
Solution by kai-phan #31660
// 你的答案
type AnyOf<T extends readonly any[]> =
T extends [infer F, ...infer R]
? F extends false
? AnyOf<R>
: true
: false
但是并不能通过这条case
Expect<Equal<AnyOf<[0, '', false, [], {}, undefined, null]>, false>
这条case与描述不符,试了其他题解也无法通过……
seems this case is wrong
Solution by L0st1 #31613
type isTrue<T, K = keyof T> =
T extends Boolean
? T
: [T] extends [never]
? false
: T extends `${infer S}`
? S extends ''
? false
: true
: T extends number
? T extends 0
? false
: true
: T extends Array<infer U>
? [U] extends [never]
? false
: true
: T extends Object
? [K] extends [never]
? false
: true
: false;
type AnyOf<T extends any[]> =
T extends [infer E, ...infer Rest]
? isTrue<E> extends true
? true
: AnyOf<Rest>
: false;
Solution by ricky-fn #31437
// your answers
// define falsy type
type Falsy = false | 0 | -0 | "" | null | [] | undefined | { [key: string]: never };
// destruct element and judge
type AnyOf<T extends readonly any[]> = T extends [infer F, ...infer R]
? F extends Falsy ? AnyOf<R> : true
: false;
Solution by d1zzzzy #31243
// your answers
type AnyOf<T extends readonly any[]> = T[number] extends 0 | false | '' | undefined | null | [] | Record<string, never> ? false : true;
Solution by wzc520pyfm #31132
// 你的答案
type Falsy = 0 | '' | never | false | [] | Record<any, never> | null | undefined;
type AnyOf<T extends readonly any[]> = T extends Falsy[] ? false : true;
Solution by CDSP98 #31033
// https://github.com/type-challenges/type-challenges/blob/main/questions/00949-medium-anyof/README.md
type IsTrue<T> = T extends 0 | "" | false | [] | undefined
? false
: T extends {}
? keyof T extends never
? false
: true
: true;
type AnyOf<T extends readonly unknown[]> = T extends [infer F, ...infer R]
? IsTrue<F> extends true
? true
: AnyOf<R>
: IsTrue<T[0]>;
Solution by flt3150sk #30885