Node.js が TypeScript を実装しなかった理由に関する簡単な記事。
以下は、TypeScript に関して Node.js で 何が行われ、何が 行われていないについて説明します。
この記事は、Node.js チームまたは TypeScript チームを批判することを目的としたものではありません。
実際には全く逆です。
私は、Node.js チームが TypeScript をこのように「実装」するという最善の選択をしたと真剣に考えています。
私がここで特に強調したいのは、Node.js は TypeScript を実装していないということです。彼らはそれに何らかのサポートを追加しただけです。これは重要な違いですが、Node.js と TypeScript についての議論では見落とされがちだと思います。
過去 2 週間で、読んだニュースレターで引用された Node.js の TypeScript 実装について言及した記事が 50 件以上ありました。
この点をきっぱりと明確にする時期が来たと思います。
ネタバレ注意: Node.js は TypeScript を実装していません。
2010 年に、Microsoft は言語に静的型付けを追加する JavaScript のスーパーセットである TypeScript をリリースしました。 TypeScript は、タイプ セーフの欠如や大規模なコードベースの保守の難しさなど、JavaScript のいくつかの欠点に対処するように設計されました。 TypeScript はリリース以来、開発者の間で人気を博しており、多くのプロジェクトが TypeScript を主要言語として採用しています。
最新の State Of JS Survey によると、TypeScript は事実上どこにでも存在します。 78% の開発者が開発時間の少なくとも 50% で TypeScript を使用しているため、「Node.js に TypeScript が実装されました」 のエコーが Web の最も奥深いところにまで届いたのも不思議ではありません。
しかし、念のため言っておきますが、そんなことは起こりませんでした。そしておそらく決してそうなることはないでしょう。
Node.js が TypeScript を実装しなかった理由はいくつかあります。私が考える最も重要なものは次の 2 つです:
実行時に 列挙型 がどのようになるかご存知ですか?オブジェクト。
これは、幸運なことに、TypeScript が実行時にどのように物事を注入するかを示す数少ない例の 1 つにすぎません。これは Node.js にとって問題です。ランタイムが TypeScript の機能を認識する必要があり、多くの複雑さとオーバーヘッドが発生することになるためです。
Node.js が ECMAScript との一貫性を維持し、その存続期間中依存関係の管理に対処する必要がない場合、現在の形式では TypeScript を依存関係として受け入れることができません。
TypeScript はセマンティック バージョニング (semver) に従いません。
一方、Node.js は semver に厳密に従っており、3 つの異なるリリース ラインがあります (現在、18.x、20.x、22.x があります)。これは、重大な変更がマイナー リリースまたはパッチ リリースで導入される可能性があり、既存のコードとの互換性の問題が発生する可能性があることを意味します。
また、サポートされているプラットフォームの数は膨大であるため、すべてをチェックするのは簡単ではありません。
Node.js は、サーバーが壊れる可能性があるため、依存関係として TypeScript を受け入れることができません。これは、Node.js による TypeScript の実装を妨げる根本的な問題です。
ここで混乱が生じます。 Node.js は TypeScript を実装していませんでしたが、実験的なフラグの下に型のストリッピングを追加しました。この機能により、開発者は TypeScript コードを作成し、型情報なしでそれを JavaScript にコンパイルすることができます。これは、開発者が上記の問題を引き起こすことなく Node.js で TypeScript を使用できるようにするための妥協案です。
例が欲しいですか?どうぞ:
function sum(a: number, b: number): number { return a + b; }
この関数は、--experimental-strip-types フラグを指定してコンパイルすると、次のようになります。
function sum(a , b ) { return a + b; }
それを見ましたか?型はなくなり、スペースに置き換えられました。 でも、なぜ?と疑問に思うかもしれません。そうすることで、ソースマップの参照が保存され、個別のビルド プロセスを必要とせずに済みます。
内部的には、これは swc をラップする amaro というパッケージを介して行われます。このパッケージは、実際のストリッピングを行うよく知られたビルド ツールです。
もちろん、前述の 列挙型 のような TypeScript 固有の機能が使用できないなどの制限が存在します。それでも、sum 関数が 2 つの数値を受け入れて 3 つ目の数値を返すようにするために 135 個の構成ファイルを作成するのを防ぐのは大きな前進です。
チャオ、
マイケル。
以上がNode.js は TypeScript を実装していませんでしたの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。