ホームページ  >  記事  >  ウェブフロントエンド  >  Node.js は TypeScript を実装していませんでした

Node.js は TypeScript を実装していませんでした

WBOY
WBOYオリジナル
2024-08-16 06:05:02609ブラウズ

Node.js did not implement TypeScript

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 を実装していません。

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 つです:

#1: TypeScript は実行時に何かを挿入します。

実行時に 列挙型 がどのようになるかご存知ですか?オブジェクト。

これは、幸運なことに、TypeScript が実行時にどのように物事を注入するかを示す数少ない例の 1 つにすぎません。これは Node.js にとって問題です。ランタイムが TypeScript の機能を認識する必要があり、多くの複雑さとオーバーヘッドが発生することになるためです。

Node.js が ECMAScript との一貫性を維持し、その存続期間中依存関係の管理に対処する必要がない場合、現在の形式では TypeScript を依存関係として受け入れることができません。

#2: セマンティック バージョニング。

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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。