From 0a9648c392f2b1eb57b3fc1cf82345f4443518a1 Mon Sep 17 00:00:00 2001 From: Jerko Steiner Date: Tue, 2 Apr 2019 14:38:01 +0800 Subject: [PATCH] Add packages/common/src/types.ts --- packages/common/src/index.ts | 1 + packages/common/src/types.ts | 22 ++++++++++++++++++++++ 2 files changed, 23 insertions(+) create mode 100644 packages/common/src/types.ts 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