record型が空かどうかの判定をする
定義
1.tstype IsEmpty<T> = [T] extends [Record<string, never>] ? true : false;
tstype IsEmpty<T> = keyof T extends never ? true : false;
tstype IsEmpty<T> = T extends Record<string, never> ? true : false;
使用例
tstype 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になる