diff --git a/packages/sw/package.json b/packages/sw/package.json
index b3935011c43b40e44afdb9f761e0f548d58a7194..163cdf592688dd49e9865076387bb70f30ff6d2e 100644
--- a/packages/sw/package.json
+++ b/packages/sw/package.json
@@ -4,7 +4,7 @@
 	"scripts": {
 		"watch": "node build.js watch",
 		"build": "node build.js",
-		"lint": "eslint --quiet src/**/*.ts"
+		"lint": "tsc --noEmit && eslint --quiet src/**/*.ts"
 	},
 	"dependencies": {
 		"esbuild": "^0.14.42",
@@ -13,7 +13,9 @@
 	},
 	"devDependencies": {
 		"@typescript-eslint/parser": "^5.45.0",
+		"@typescript/lib-webworker": "npm:@types/serviceworker@^0.0.58",
 		"eslint": "^8.16.0",
-		"eslint-plugin-import": "^2.26.0"
+		"eslint-plugin-import": "^2.26.0",
+		"typescript": "4.9.4"
 	}
 }
diff --git a/packages/sw/src/scripts/create-notification.ts b/packages/sw/src/scripts/create-notification.ts
index cbc86d1d7e03bff22d9f9848c564d87e6e6ec4d4..c27e8c709c99156dd286ce035830b04fea3d0d57 100644
--- a/packages/sw/src/scripts/create-notification.ts
+++ b/packages/sw/src/scripts/create-notification.ts
@@ -1,11 +1,6 @@
 /*
  * Notification manager for SW
  */
-
-// TODO: remove this declaration when https://github.com/microsoft/TypeScript/issues/11781 closes
-// eslint-disable-next-line no-var
-declare var self: ServiceWorkerGlobalScope;
-
 import { swLang } from '@/scripts/lang';
 import { cli } from '@/scripts/operations';
 import { pushNotificationDataMap } from '@/types';
diff --git a/packages/sw/src/scripts/operations.ts b/packages/sw/src/scripts/operations.ts
index dc24315aea7c9c1e7713cbb424ef65d8d5842b05..fd27418073dc80ee20cd9c3aaf95f81bdb6539ae 100644
--- a/packages/sw/src/scripts/operations.ts
+++ b/packages/sw/src/scripts/operations.ts
@@ -2,11 +2,6 @@
  * Operations
  * 各種操作
  */
-
-// TODO: remove this declaration when https://github.com/microsoft/TypeScript/issues/11781 closes
-// eslint-disable-next-line no-var
-declare var self: ServiceWorkerGlobalScope;
-
 import * as Misskey from 'misskey-js';
 import { SwMessage, swMessageOrderType } from '@/types';
 import { acct as getAcct } from '@/filters/user';
diff --git a/packages/sw/src/sw.ts b/packages/sw/src/sw.ts
index 3d2413ab2e33f4ff8aa05f656707e85ada3dcd19..04372a070854e5564cacd9f6033f13853607e942 100644
--- a/packages/sw/src/sw.ts
+++ b/packages/sw/src/sw.ts
@@ -1,7 +1,3 @@
-// TODO: remove this declaration when https://github.com/microsoft/TypeScript/issues/11781 closes
-// eslint-disable-next-line no-var
-declare var self: ServiceWorkerGlobalScope;
-
 import { createEmptyNotification, createNotification } from '@/scripts/create-notification';
 import { swLang } from '@/scripts/lang';
 import { swNotificationRead } from '@/scripts/notification-read';
diff --git a/yarn.lock b/yarn.lock
index 43f2ae81d4d3b2823cfdc4cb4923c0ba0f6d2f6c..efd45929854d1e6adb94c505622e49cab8a23cac 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -3009,6 +3009,13 @@ __metadata:
   languageName: node
   linkType: hard
 
+"@typescript/lib-webworker@npm:@types/serviceworker@^0.0.58":
+  version: 0.0.58
+  resolution: "@types/serviceworker@npm:0.0.58"
+  checksum: d6aa73d02854968ccaa0fb7f1aafb30b202870dc15b9d09e3ee8fe8131ffc26d521c1e56b5b030f39fba329143a32b2fa88351d57df3ae5aa29498384a251946
+  languageName: node
+  linkType: hard
+
 "@vitejs/plugin-vue@npm:4.0.0":
   version: 4.0.0
   resolution: "@vitejs/plugin-vue@npm:4.0.0"
@@ -15791,11 +15798,13 @@ __metadata:
   resolution: "sw@workspace:packages/sw"
   dependencies:
     "@typescript-eslint/parser": ^5.45.0
+    "@typescript/lib-webworker": "npm:@types/serviceworker@^0.0.58"
     esbuild: ^0.14.42
     eslint: ^8.16.0
     eslint-plugin-import: ^2.26.0
     idb-keyval: ^6.1.0
     misskey-js: 0.0.14
+    typescript: 4.9.4
   languageName: unknown
   linkType: soft