type Falsy = 0 | '' | false | [] | { [K in any]: never } | undefined | null;
type AnyOf<T extends readonly any[]> = T[number] extends Falsy ? false : true;
Solution by DevShinnThant #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
This is my solution, although it's a bit rigid, at least it can work. Can someone guide me.
type AnyOf<T extends readonly any[]> = T extends [infer L, ...infer R]
? IsFalse<L> extends false
? AnyOf<R>
: true
: false
type IsFalse<F> = F extends false
? false
: F extends 0
? false
: F extends ''
? false
: F extends []
? false
: keyof F extends keyof {}
? false
: F extends undefined
? false
: F extends null
? false
: true
/**
* 0 => false
* '' => false
* false => false
* [] => false
* {} => false
* undefined => false
* null => false
*/
Solution by Chan-Yuxi #30596
// ============= Test Cases ============= import type { Equal, Expect } from "./test-utils";
type cases = [ Expect< Equal<AnyOf<[1, "test", true, [1], { name: "test" }, { 1: "test" }]>, true>
, Expect<Equal<AnyOf<[1, "", false, [], {}]>, true>>, Expect<Equal<AnyOf<[0, "test", false, [], {}]>, true>>, Expect<Equal<AnyOf<[0, "", true, [], {}]>, true>>, Expect<Equal<AnyOf<[0, "", false, [1], {}]>, true>>, Expect<Equal<AnyOf<[0, "", false, [], { name: "test" }]>, true>>, Expect<Equal<AnyOf<[0, "", false, [], { 1: "test" }]>, true>>, Expect< Equal<AnyOf<[0, "", false, [], { name: "test" }, { 1: "test" }]>, true> , Expect<Equal<AnyOf<[0, "", false, [], {}, undefined, null]>, false>>, Expect<Equal<AnyOf<[]>, false>> ];
// ============= Your Code Here ============= type AnyOf<T extends readonly any[]> = T[number] extends | "" | 0 | false | null | undefined | [] | Record<string, never> ? false : true;
Solution by z-w-H #30470
type Falsy = false | 0 | '' | undefined | null | [] | Record<string, never>;
type AnyOf<T extends readonly any[]> = T extends [infer F, ...infer Rest] ? (F extends Falsy ? AnyOf<Rest> : true) : false;
Solution by kai-phan #30389
type FalsyArray = 0 | '' | false | [] | Record<string, never> | undefined | null;
type AnyOf<T extends readonly any[]> = T extends FalsyArray[] ? false : true
Solution by Miodan #30327
type IsNotEmpty<T> = T extends undefined | null ? never
: T extends 0 ? never
: T extends [] ? never
: T extends false ? never
: T extends true ? true
: T extends '' ? never
: T extends object ?
keyof T extends never ? never : true
: true ;
type AnyOf<T extends readonly any[]> = T[number] extends never ? false : IsNotEmpty<T[number]> extends never ? false : true;
Better:
type AnyOf<T extends readonly any[]> = T[number] extends 0 | '' | false | [] | {[key: string]: never} | null | undefined ? false : true
Solution by qianzhong516 #29872
type AnyOf<T extends readonly any[]> = T[number] extends 0 | false | '' | {[key: string]: never} | [] | undefined | null ? false : true
Solution by maximallain #29748
type FalsyValue = [] | '' | {[key: string]: never} | false | 0 | undefined | null
type IsFalsy<V> = V extends FalsyValue ? true : false
type AnyOf<T extends readonly any[]> =
T extends [infer A, ...infer Rest]
? IsFalsy<A> extends true
? AnyOf<Rest>
: true
: false
Solution by MohammadArasteh #29511
type CheckEqual<T, U> = (
() => P extends T ? 1 : 2) extends (
() => P extends U ? 1 : 2) ? true : false type CheckTrue = U extends '' | 0 | false | null | undefined ? never : CheckEqual<{}, U> extends true ? never : CheckEqual<[], U> extends true ? never : true type AnyOf<T extends readonly any[]> = T['length'] extends 0 ? false : [CheckTrue<T[number]>] extends [never] ? false : true
// 你的答案
Solution by Yirujet #29508
type AnyOf<T extends readonly any[]> = T extends never[]
? false
: {} | null | undefined extends T[number]
? false
: true;
Solution by fauxparse #28810