diff --git a/packages/common/src/index.ts b/packages/common/src/index.ts index 60d69e1..c8387be 100644 --- a/packages/common/src/index.ts +++ b/packages/common/src/index.ts @@ -12,4 +12,5 @@ export * from './IUserTeam' export * from './ReadonlyRecord' export * from './URLFormatter' export * from './indexBy' +export * from './types' export * from './without' diff --git a/packages/common/src/types.ts b/packages/common/src/types.ts new file mode 100644 index 0000000..e9f225c --- /dev/null +++ b/packages/common/src/types.ts @@ -0,0 +1,22 @@ +/** + * transform unknown into undefined + */ +export type Optional = T extends {} ? T : undefined + +export type NonUndefinedPropertyNames = { + [K in keyof T]: T[K] extends undefined ? never: K +}[keyof T] + +export type OnlyRequired = Pick> + +export type NonUnknownPropertyNames = { + [K in keyof T]: T[K] extends {} ? K : never +}[keyof T] + +export type OnlyDefined = Pick> + +/** + * Remove types from T that are not assignable to U + * https://www.typescriptlang.org/docs/handbook/advanced-types.html + */ +export type Filter = T extends U ? T : never