TypeScript
TypeScript特有の組み込み型関数
Type challenge
TypeScript導入にあたって
JavaScriptを熟知した人間にとっては、静的型の制限があることによりJavaScriptでは簡単に実現できていた設計がTypeScriptでは困難になるという場面がある。
コンパイル時評価 or コンパイル時計算
TypeScript のコンパイル時計算はどこまでできるのか?
TypeScriptはJavaScriptへのトランスパイル時に実行時に振る舞いを変えるような最適化や評価は行いない。
そのため、コードがJavaScriptにトランスパイルされたとしても、style1とstyle3の比較やオブジェクトの作成はランタイム時(ブラウザやNode.jsでコードが実際に実行される時)に行われる。
TypeScriptの主要な役割は型チェックにある。
これはコンパイル時(具体的にはトランスパイル時)に行われ、型の不整合や他の型関連のエラーを検出できる。
これにより、実行時のエラーを減少させ、コードの品質を向上させることが期待できる。
しかし、TypeScriptはJavaScriptへのシンプルなトランスパイルを目指しており、コンパイル時の最適化や変数の評価、インライン化などの高度な最適化は行いません。そのため 、TypeScriptでの評価や計算は、トランスパイル後のJavaScriptコードが実際に実行される際(ランタイム)に行われます。
これはTypeScriptがJavaScriptのスーパーセットであり、結果として出力されるJavaScriptの振る舞いや性能を直感的に理解することを目指しているためです。
staticキーワードは評価されるのか
JavaScriptやTypeScriptにおける static
キーワードに関連するフィールドやメソッドは、そのクラスのインスタンスを生成しなくてもアクセスできるメンバーを示します。しかし、static
が評価済みという意味ではない。
class MyClass {
static staticValue = "This is a static value";
static staticMethod() {
console.log("This is a static method.");
}
}
console.log(MyClass.staticValue); // This is a static value
MyClass.staticMethod(); // This is a static method.
上記の例では、MyClass
の staticValue
という静的フィールドと staticMethod
という静的メソッドにアクセスしています。これらはインスタンス化せずとも直接アクセス可能です。
しかしこの staticValue
の初期化や staticMethod
の定義自体は、スクリプトが読み込まれて実行されるタイミング(ランタイム)で行われます。ですので、static
キーワードが評価済みというわけではなく、実行時に評価されることを意味しています。
ただし、一部のJavaScriptエンジンやツールは、特定のパターンを検出して最適化を行うことがありますが、これはTypeScriptやJavaScriptの言語仕様に基づくものではありません。