[gnome-sound-recorder/wip/cdavis/typescript] general: Use narrowing for error types
- From: Christopher Davis <christopherdavis src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-sound-recorder/wip/cdavis/typescript] general: Use narrowing for error types
- Date: Tue, 9 Aug 2022 06:21:49 +0000 (UTC)
commit f19d3bbac03e79bf02c0122d4bb7c51ecd7537aa
Author: Christopher Davis <christopherdavis gnome org>
Date: Tue Aug 9 02:16:56 2022 -0400
general: Use narrowing for error types
Errors in catch blocks can either be labeled `any` or `unknown`.
The semantics make a big difference. `any` here means
that a value can be anything, thus any method call or field
access is valid - essentially it turns off type checking for
the value. `unknown` however means that it's *something*,
but we need to figure out what.
We pair `unknown` with the `instanceof` operator in order
to narrow down the type to something specific. This allows
us to preserve TypeScript's type checking for error values
and their fields and methods.
See
https://www.typescriptlang.org/docs/handbook/2/narrowing.html#instanceof-narrowing
src/application.ts | 10 +++++-----
src/recordingList.ts | 40 +++++++++++++++++++++-------------------
2 files changed, 26 insertions(+), 24 deletions(-)
---
diff --git a/src/application.ts b/src/application.ts
index d3d3462..bb2f7e2 100644
--- a/src/application.ts
+++ b/src/application.ts
@@ -105,11 +105,11 @@ export const Application = GObject.registerClass(class Application extends Adw.A
try {
CacheDir.make_directory_with_parents(null);
RecordingsDir.make_directory_with_parents(null);
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
- } catch (e: any) {
- if (!e.matches(Gio.IOErrorEnum, Gio.IOErrorEnum.EXISTS))
- console.error(`Failed to create directory ${e}`);
-
+ } catch (e: unknown) {
+ if (e instanceof GLib.Error) {
+ if (!e.matches(Gio.IOErrorEnum, Gio.IOErrorEnum.EXISTS))
+ console.error(`Failed to create directory ${e}`);
+ }
}
this._initAppMenu();
}
diff --git a/src/recordingList.ts b/src/recordingList.ts
index 854cc86..d12edff 100644
--- a/src/recordingList.ts
+++ b/src/recordingList.ts
@@ -78,11 +78,12 @@ export const RecordingList = GObject.registerClass(class RecordingList extends G
objCopy.copy_finish(resCopy);
objCopy.trash_async(GLib.PRIORITY_LOW, this.cancellable, null);
this.dirMonitor.emit_event(dest, src, Gio.FileMonitorEvent.MOVED_IN);
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
- } catch (e: any) {
- if (!e.matches(Gio.IOErrorEnum, Gio.IOErrorEnum.CANCELLED)) {
- console.error(`Failed to copy recording ${name} to the new location`);
- log(e);
+ } catch (e: unknown) {
+ if (e instanceof GLib.Error) {
+ if (!e.matches(Gio.IOErrorEnum, Gio.IOErrorEnum.CANCELLED)) {
+ console.error(`Failed to copy recording ${name} to the new location`);
+ log(e);
+ }
}
allCopied = false;
}
@@ -98,19 +99,20 @@ export const RecordingList = GObject.registerClass(class RecordingList extends G
oldDir?.delete_async(GLib.PRIORITY_LOW, this.cancellable, (objDelete: Gio.File | null,
resDelete: Gio.AsyncResult) => {
try {
objDelete?.delete_finish(resDelete);
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
- } catch (e: any) {
- log('Failed to remove the old Recordings directory. Ignore if you\'re using
flatpak');
- log(e);
+ } catch (e: unknown) {
+ if (e instanceof GLib.Error) {
+ log('Failed to remove the old Recordings directory. Ignore if you\'re using
flatpak');
+ log(e);
+ }
}
});
}
}
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
- } catch (e: any) {
- if (!e.matches(Gio.IOErrorEnum, Gio.IOErrorEnum.CANCELLED))
- console.error(`Failed to copy old recordings ${e}`);
-
+ } catch (e: unknown) {
+ if (e instanceof GLib.Error) {
+ if (!e.matches(Gio.IOErrorEnum, Gio.IOErrorEnum.CANCELLED))
+ console.error(`Failed to copy old recordings ${e}`);
+ }
}
}
@@ -136,11 +138,11 @@ export const RecordingList = GObject.registerClass(class RecordingList extends G
} else {
this._enumerator?.close(this.cancellable);
}
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
- } catch (e: any) {
- if (!e.matches(Gio.IOErrorEnum, Gio.IOErrorEnum.CANCELLED))
- console.error(`Failed to load recordings ${e}`);
-
+ } catch (e: unknown) {
+ if (e instanceof GLib.Error) {
+ if (!e.matches(Gio.IOErrorEnum, Gio.IOErrorEnum.CANCELLED))
+ console.error(`Failed to load recordings ${e}`);
+ }
}
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]