TypeScriptがJavascriptのスーパーセットであると主張されています。 スタックについてはquestionです。 ここに仕様からの引用があります。Typescript:100%有効なJavaScriptコードであるのにこのコードが例外をスローする理由
TypeScriptはJavaScriptの構文砂糖です。 TypeScript構文は、ECMAScript 2015(ES2015)構文の スーパーセットです。すべてのJavaScriptプログラム もTypeScriptプログラムです。
だから私の理解では、任意のスタンドアロンのTSCコンパイラによって(いくつかの追加のフラグとすることができる)、すなわちコンパイルし、有効なtypescriptですコードとして扱うことができるのJavaScriptファイルということです。
しかし、ここでは、JSコードの例です:
class ClassA {}
ClassA.prototype.ping =() => {console.log('PING')}
有効ではJavaScriptしかし、あなたはtypescriptですとそれをコンパイルしようとするだろう場合、あなたが買ってあげる: error TS2339: Property 'ping' does not exist on type 'ClassA'
一つは、インターフェイスを宣言することができますClassAが実装できるクラスもありますが、これはクラスやプロトタイプの構文を組み合わせたようなコードを書くのは非常に典型的ではありませんが、これはtscでコンパイルしている間にエラーを発生させる有効なjsコードの例です。
ですから、これが仕様からの引用にどのように矛盾しないのですか?
それが有効JSかもしれない余分な情報については、型システムに伝えることができ、それは良いJSではありません。クラスを使用している場合は、プロトタイプ操作を行わないでください。真のコンストラクタ関数+プロトタイプコードを書くか、適切なクラスコードを使用してください。かなり確実なタイスクリプトはあなたに*本当に変な糞(tm)*をやってもらうことを妨げています。 'クラスClassA {ping(){console.log( 'PING'); }、...} ' –
将来の参考資料として、なぜTSはこのコードでエラーを投げるのですか?奇妙な告発的なトーンなしで、この同じ質問をするより簡単な方法でした。 – Retsam
@Retsam確かに、告発的な注釈を取り除くためにタイトル(少なくとも)を編集させてください、それはどんな告発でもありません。 – shabunc