Skip to content

Commit

Permalink
Merge commit '3d69246dc219a5f75cd2928b2bb8077081663a4f' into 2024-11
Browse files Browse the repository at this point in the history
  • Loading branch information
sajikix committed Nov 18, 2024
2 parents 0d3f203 + 3d69246 commit 89dbb41
Showing 1 changed file with 40 additions and 5 deletions.
45 changes: 40 additions & 5 deletions src/content/posts/2024/11.md
Original file line number Diff line number Diff line change
Expand Up @@ -66,13 +66,48 @@ Next.js 14 以前での Next.js App Router では、キャッシュ周りに関

Next.js 14 までに App Router に関してのキャッシュの知識を得たり記事を書いたりした人(私もですが…)からすると、ある意味リセットが必要となってしまいますが、個人的には従来の暗黙的な挙動が多い状態と比較すると、かなりわかりやすい形に向かっている印象があります。

### [xxxx](xxxx)
### [Announcing TypeScript 5.7 RC](https://devblogs.microsoft.com/typescript/announcing-typescript-5-7-rc/)

- 共有者: @xxx
- 共有者: @sajikix

〜〜〜
〜〜〜
〜〜〜
TypeScript 5.7 RC がリリースされました。予定通りに行けば 11 月の末ごろには正式版がリリースされる予定です。

今回はその中から個人的に注目しているものを紹介します。

#### Checks for Never-Initialized Variables

初期化していない変数に対するチェックが厳しくなりました。今まで変数の初期化チェックが甘くなる例として変数が別の関数でアクセスされる場合などがありましたが、今回の変更で部分的にこの問題が解決されています。

```ts
function foo() {
let result: number
function printResult() {
console.log(result) // 初期化してないよってエラーになる(今までエラーにならなかった)
}
}
```

#### Path Rewriting for Relative Paths

相対パスで import する際の拡張子の扱い(`.js`/`.ts`)について新しく `--rewriteRelativeImportExtensions` というオプションが追加されました。

そもそも ESM 環境下ではファイルの拡張子は省略できず、TS 環境下でも一般的には`.js`を使う必要があります。一方、近年 ts ファイルをそのまま実行できるランタイムが増えており、このようなランタイムで実行する場合は`.ts`でパスを指定します。必ずそのようなランタイムで実行されることが保証できれば良いのですが、Node.js が試験的に`--experimental-strip-types`オプションで TS ファイルのサポートを始めたことで、「`.ts`で読む場合」と「トランスパイルして`.js`としなければならない場合」の2パターンが同時に発生しうるようになりました。

このような問題を解決すべく `--rewriteRelativeImportExtensions` オプションの有効化時は tsc 実行時に初めて相対パスの`.ts`拡張子を`.js`に書き換える機能を提供します。一方で対応できない文法や機能などもあり利用するには大きな注意が必要です。基本的には`--experimental-strip-types`を有効にしている環境のための対応策と考えた方が良いでしょう。

詳しくは Uhyo さんの書かれた [TS 5.7 の --rewriteRelativeImportExtensions オプションを使う前に読む記事](https://zenn.dev/uhyo/articles/rewrite-relative-import-extensions-read-before-use#--rewriterelativeimportextensions-%E3%82%AA%E3%83%97%E3%82%B7%E3%83%A7%E3%83%B3%E3%81%AE%E8%BF%BD%E5%8A%A0%E3%81%A8%E3%81%9D%E3%81%AE%E5%9B%B0%E9%9B%A3)を読むと良さそうです。

#### Validated JSON Imports in --module nodenext

`module`オプションで `nodenext`を指定した場合、JSON の import では [`Import Attributes`](https://github.com/tc39/proposal-import-attributes) を利用した記法に変更しなくてはならなくなりました。

```ts
import myConfig from "./myConfig.json" with { type: "json" };
```

`Import Attributes` は今年(2024 年)10 月の TC39 meeting で Stage4 になり来年の ES2025 として入るようになる機能です。import 文の後ろに `with {key:value}`でメタ情報などを追加できるようになります。

現状は `--module nodenext` 時のみですが、今後 JSON や JS 以外のファイルを import する際は `Import Attributes` を利用することがデファクトになるかも知れないので覚えておくと良さそうです。

## 🗓 Monthly Articles

Expand Down

0 comments on commit 89dbb41

Please sign in to comment.