summaryrefslogtreecommitdiff
path: root/js/util.ts
diff options
context:
space:
mode:
authorKitson Kelly <me@kitsonkelly.com>2018-08-15 09:40:30 -0700
committerRyan Dahl <ry@tinyclouds.org>2018-08-15 12:40:30 -0400
commit168d92f5d254a0671a1c34ca79d7b5600084b139 (patch)
treee299eb12f7341d6665b89302acd188f6117ac2c5 /js/util.ts
parent0ce7b6e8701bf00ec181a72df030404aecb5bc4a (diff)
Use typescript strict mode (#505)
Diffstat (limited to 'js/util.ts')
-rw-r--r--js/util.ts11
1 files changed, 8 insertions, 3 deletions
diff --git a/js/util.ts b/js/util.ts
index d4563936f..c1e84610f 100644
--- a/js/util.ts
+++ b/js/util.ts
@@ -49,15 +49,20 @@ export function arrayToStr(ui8: Uint8Array): string {
// produces broken code when targeting ES5 code.
// See https://github.com/Microsoft/TypeScript/issues/15202
// At the time of writing, the github issue is closed but the problem remains.
-export interface Resolvable<T> extends Promise<T> {
+export interface ResolvableMethods<T> {
resolve: (value?: T | PromiseLike<T>) => void;
// tslint:disable-next-line:no-any
reject: (reason?: any) => void;
}
+
+type Resolvable<T> = Promise<T> & ResolvableMethods<T>;
+
export function createResolvable<T>(): Resolvable<T> {
- let methods;
+ let methods: ResolvableMethods<T>;
const promise = new Promise<T>((resolve, reject) => {
methods = { resolve, reject };
});
- return Object.assign(promise, methods) as Resolvable<T>;
+ // TypeScript doesn't know that the Promise callback occurs synchronously
+ // therefore use of not null assertion (`!`)
+ return Object.assign(promise, methods!) as Resolvable<T>;
}