diff --git a/docs/subsystems/html-css.md b/docs/subsystems/html-css.md
index d738438a30..efe69d36a7 100644
--- a/docs/subsystems/html-css.md
+++ b/docs/subsystems/html-css.md
@@ -200,10 +200,10 @@ needs to be accessible from one of the entry points defined either in
- If you plan to only use the file within the app proper, and not on the login
page or other standalone pages, put it in the `app` bundle by importing it
- in `web/src/bundles/app.js`.
+ in `web/src/bundles/app.ts`.
- If it needs to be available both in the app and all
logged-out/portico pages, import it to
- `web/src/bundles/common.js` which itself is imported to the
+ `web/src/bundles/common.ts` which itself is imported to the
`app` and `common` bundles.
- If it's just used on a single standalone page which is only used in
a development environment (e.g. `/devlogin`) create a new entry
diff --git a/docs/subsystems/logging.md b/docs/subsystems/logging.md
index a4d11849da..11c8d3a1d8 100644
--- a/docs/subsystems/logging.md
+++ b/docs/subsystems/logging.md
@@ -191,7 +191,7 @@ might use). In development, this means displaying a highly visible
overlay over the message view area, to make exceptions in testing a
new feature hard to miss.
-- Blueslip is implemented in `web/src/blueslip.js`.
+- Blueslip is implemented in `web/src/blueslip.ts`.
- In order to capture essentially any error occurring in the browser,
Blueslip listens for the `error` event on `window`, and has methods
for being manually triggered by Zulip JavaScript code for warnings
diff --git a/docs/subsystems/typing-indicators.md b/docs/subsystems/typing-indicators.md
index c4b3ab89d7..a5a66747e4 100644
--- a/docs/subsystems/typing-indicators.md
+++ b/docs/subsystems/typing-indicators.md
@@ -115,7 +115,7 @@ The main goal is then to triage which events should lead to
display changes.
The web app client maintains a list of incoming "typists" using
-code in `web/src/typing_data.js`. The API here has functions
+code in `web/src/typing_data.ts`. The API here has functions
like the following:
- `add_typist`
diff --git a/docs/translating/internationalization.md b/docs/translating/internationalization.md
index 426ebf615a..5bcfd54a6a 100644
--- a/docs/translating/internationalization.md
+++ b/docs/translating/internationalization.md
@@ -239,7 +239,7 @@ $("#foo").html(
The only HTML tags allowed directly in translated strings are the
simple HTML tags enumerated in `default_html_elements`
-(`web/src/i18n.js`) with no attributes. This helps to avoid
+(`web/src/i18n.ts`) with no attributes. This helps to avoid
exposing HTML details to translators. If you need to include more
complex markup such as a link, you can define a custom HTML tag
locally to the translation:
diff --git a/web/tests/example1.test.js b/web/tests/example1.test.js
index d794fd22e8..3c61d40e7c 100644
--- a/web/tests/example1.test.js
+++ b/web/tests/example1.test.js
@@ -20,7 +20,7 @@ const people = zrequire("people");
const stream_data = zrequire("stream_data");
const util = zrequire("util");
-// Let's start with testing a function from util.js.
+// Let's start with testing a function from util.ts.
//
// The most basic unit tests load up code, call functions,
// and assert truths:
diff --git a/web/tests/i18n.test.js b/web/tests/i18n.test.js
index 6e4507acbc..c6a40ee052 100644
--- a/web/tests/i18n.test.js
+++ b/web/tests/i18n.test.js
@@ -26,7 +26,7 @@ require("../src/templates");
// All of our other tests stub out i18n activity;
// here we do a quick sanity check on the engine itself.
-// `i18n.js` initializes FormatJS and is imported by
+// `i18n.ts` initializes FormatJS and is imported by
// `templates.js`.
unmock_module("../src/i18n");
const {$t, $t_html, get_language_name, get_language_list_columns, initialize} = zrequire("i18n");