1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
export type NotUndefined<T> = T extends undefined ? never : T; export type Undefinable<T> = T | undefined; function isNotUndefined<T>(input: Undefinable<T>): input is NotUndefined<T> { return input !== undefined; } export function expectNotUndefined<T>(input: Undefinable<T>, msg: string): NotUndefined<T> { if (isNotUndefined(input)) { return input; } throw new TypeError(msg); } export function unwrapUndefinable<T>(input: Undefinable<T>): NotUndefined<T> { return expectNotUndefined(input, `unwrapping \`undefined\``); }