Unnamed repository; edit this file 'description' to name the repository.
Diffstat (limited to 'editors/code/src/nullable.ts')
| -rw-r--r-- | editors/code/src/nullable.ts | 19 |
1 files changed, 19 insertions, 0 deletions
diff --git a/editors/code/src/nullable.ts b/editors/code/src/nullable.ts new file mode 100644 index 0000000000..e973e16290 --- /dev/null +++ b/editors/code/src/nullable.ts @@ -0,0 +1,19 @@ +export type NotNull<T> = T extends null ? never : T; + +export type Nullable<T> = T | null; + +function isNotNull<T>(input: Nullable<T>): input is NotNull<T> { + return input !== null; +} + +function expectNotNull<T>(input: Nullable<T>, msg: string): NotNull<T> { + if (isNotNull(input)) { + return input; + } + + throw new TypeError(msg); +} + +export function unwrapNullable<T>(input: Nullable<T>): NotNull<T> { + return expectNotNull(input, `unwrapping \`null\``); +} |