generated at
record型が空かどうかの判定をする


定義
1.ts
type IsEmpty<T> = [T] extends [Record<string, never>] ? true : false;
ts
type IsEmpty<T> = keyof T extends never ? true : false;
ts
type IsEmpty<T> = T extends Record<string, never> ? true : false;

使用例
ts
type A1 = IsEmpty<{ a: string }>; // false type A2 = IsEmpty<{ 2: string }>; // false type A3 = IsEmpty<{}>; // true


上記の 1.ts はunionにも対応している
ts
test('IsEmpty', () => { expectTypeOf<IsEmpty<{ a: true }>>().toEqualTypeOf<false>(); expectTypeOf<IsEmpty<{}>>().toEqualTypeOf<true>(); expectTypeOf<IsEmpty<{ a: true } | { a: false }>>().toEqualTypeOf<false>(); expectTypeOf<IsEmpty<{} | {}>>().toEqualTypeOf<true>(); expectTypeOf<IsEmpty<{} | { a: true }>>().toEqualTypeOf<false>(); });
unionn含まれるrecord全て {} のときにのみtrueになる