Created
July 17, 2018 08:20
-
-
Save JaeYeopHan/1db720847325f084d9b1f68926c53f6c to your computer and use it in GitHub Desktop.
helper types
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/** | |
* Represents the completion of an asynchronous operation | |
*/ | |
interface Promise<T> { | |
/** | |
* Attaches callbacks for the resolution and/or rejection of the Promise. | |
* @param onfulfilled The callback to execute when the Promise is resolved. | |
* @param onrejected The callback to execute when the Promise is rejected. | |
* @returns A Promise for the completion of which ever callback is executed. | |
*/ | |
then<TResult1 = T, TResult2 = never>(onfulfilled?: ((value: T) => TResult1 | PromiseLike<TResult1>) | undefined | null, onrejected?: ((reason: any) => TResult2 | PromiseLike<TResult2>) | undefined | null): Promise<TResult1 | TResult2>; | |
/** | |
* Attaches a callback for only the rejection of the Promise. | |
* @param onrejected The callback to execute when the Promise is rejected. | |
* @returns A Promise for the completion of the callback. | |
*/ | |
catch<TResult = never>(onrejected?: ((reason: any) => TResult | PromiseLike<TResult>) | undefined | null): Promise<T | TResult>; | |
} | |
interface ArrayLike<T> { | |
readonly length: number; | |
readonly [n: number]: T; | |
} | |
/** | |
* Make all properties in T optional | |
*/ | |
type Partial<T> = { | |
[P in keyof T]?: T[P]; | |
}; | |
/** | |
* Make all properties in T required | |
*/ | |
type Required<T> = { | |
[P in keyof T]-?: T[P]; | |
}; | |
/** | |
* Make all properties in T readonly | |
*/ | |
type Readonly<T> = { | |
readonly [P in keyof T]: T[P]; | |
}; | |
/** | |
* From T pick a set of properties K | |
*/ | |
type Pick<T, K extends keyof T> = { | |
[P in K]: T[P]; | |
}; | |
/** | |
* Construct a type with a set of properties K of type T | |
*/ | |
type Record<K extends keyof any, T> = { | |
[P in K]: T; | |
}; | |
/** | |
* Exclude from T those types that are assignable to U | |
*/ | |
type Exclude<T, U> = T extends U ? never : T; | |
/** | |
* Extract from T those types that are assignable to U | |
*/ | |
type Extract<T, U> = T extends U ? T : never; | |
/** | |
* Exclude null and undefined from T | |
*/ | |
type NonNullable<T> = T extends null | undefined ? never : T; |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment