record型が空かどうかの判定をする
定義
code:1.ts
code:ts
type IsEmpty<T> = keyof T extends never ? true : false;
code:ts
type IsEmpty<T> = T extends Record<string, never> ? true : false;
使用例
code:ts
type A1 = IsEmpty<{ a: string }>; // false
type A2 = IsEmpty<{ 2: string }>; // false
type A3 = IsEmpty<{}>; // true
上記の1.tsはunionにも対応している
code: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になる