Import Assertions
TL;DR
インポートのシンタックス assert
をサポートするようになった。
JavaScriptのJSON読み込み
従来のJavaScriptでJSONを読み込むには、いちどファイルを読み込んだ後にパースする必要があった。 モジュールとして読み込めるようにしたのが「Import Assertions」という仕様。
https://github.com/tc39/proposal-import-assertions
import users from "./users.json" assert { type: "json" };
もともとは assert
のないシンプルなシンタックスの予定だった。
import users from "./users.json";
これには拡張子とは異なった意図しないコードが実行される危険がある。そこで開発者がJSONモジュールであることを示すために assert
が追加された。
TypeScriptでの扱い
JavaScriptの「Import Assertion」シンタックスをTypeScriptがサポートするようになった。
// users.json
[
{ id: 1, name: "A" },
{ id: 2, name: "B" },
{ id: 3, name: "C" },
]
import users from "./users.json" assert { type: "json" };
users.map(user => user.id);
TypeScriptはtypeに関与しないので、間違った指定でも通る。
import users from "./users.json" assert { type: "jsooooooon" };
ECMAScriptでの扱い
assert
通りのコンテンツかどうかをチェックするのはブラウザなど実行環境の仕事。
違反がある場合、以下のようなエラーが出力される。
// import *** from "***" assert { type: "json" }
// レスポンス:JavaScript
Failed to load module script: Expected a JSON module script but the server responded with a MIME type of "application/javascript".
// import *** from "***"
// レスポンス:JSON
Failed to load module script: Expected a JavaScript module script but the server responded with a MIME type of "application/json".
Last updated