type resolveCallback<T> = (value: T) => void;
type rejectCallback = (reason?: unknown) => void;

export const newPromise = <T>(): [
	Promise<T>,
	resolveCallback<T>,
	rejectCallback
] => {
	let resolve: resolveCallback<T>;
	let reject: rejectCallback;
	const promise = new Promise(
		(res: resolveCallback<T>, rej: rejectCallback) => {
			resolve = res;
			reject = rej;
		}
	);
	return [promise, resolve!, reject!];
};