# JavaScript

これまで存在した数多くの競合言語は (きっとこれからもそうなのでしょうが)、 *ある構文* を *JavaScript* へとコンパイルするものでした。TypeScriptは、 *JavaScriptがTypeScriptである* という点において、他とは一線を画しています。これを表す図がこちらです：

![JavaScriptはTypeScriptです](https://raw.githubusercontent.com/basarat/typescript-book/master/images/venn.png)

しかし、これが意味していることは、 *JavaScriptを学ぶ必要がある* ということです (良いニュースは、JavaScript**だけ**を学べば良いということです)。TypeScriptは、単に、JavaScriptのコードを良いドキュメントにする方法を標準化したものに過ぎません。

* 単に新しい構文が提供されたというだけでは、バグの発見に寄与することはありません。しかし、より意図が明確で、バグの少ないコードを書く助けには、なるかもしれません (例：CoffeeScript)。
* 新しく作られたプログラミング言語では、慣れ親しんだ開発環境やコミュニティから遠ざけられてしまいます。しかし、もしそれが既に慣れ親しんだものに近い雰囲気があれば、より馴染みやすくなるかもしれません(例：Dartは、Java や C# の開発者にとって馴染みやすいものです)。

TypeScriptは単にドキュメント付きのJavaScriptです。

> JSNextは解釈の自由度が高く、JSの次のバージョンとして提案されたとしても、その全てが実際にブラウザでサポートされるとは限りません。TypeScriptは、提案が[ステージ3](https://tc39.es/process-document/)に達しさえすれば、それをサポートするようになります。

## TypeScriptは、JavaScriptを改善する

TypeScriptは、JavaScriptの全く意味が通らない変な仕様から開発者を守ります(こんなことを覚えておく必要はありません)：

```typescript
[] + []; // JavaScript は "" を返す (意味不明な仕様)。 TypeScript はエラーを表示する

//
// その他の意味不明なJavaScriptの仕様
// - 実行時エラーが発生しない (そのため、デバッグが難しい）
// - しかし、TypeScriptはコンパイル時にエラーを表示する (デバッグ自体を不要にする)
//
{} + []; // JS : 0, TSはエラー
[] + {}; // JS : "[object Object]", TSはエラー
{} + {}; // JS : ブラウザによって、NaN または [object Object][object Object], TSはエラー
"こんにちは" - 1; // JS : NaN, TSはエラー

function add(a,b) {
  return
    a + b; // JS : undefined, TSはエラー '到達不可能なコードが検知されました'
}
```

本質的には、TypeScriptはJavaScriptのリンター(コードの静的解析ツール)です。\_型情報\_を持たない他のJavaScriptのリンターよりも優れているだけです。

## それでも開発者は、JavaScriptを学ぶ必要がある

TypeScriptは、「実際にはJavaScriptを書く」という点から非常に実用的なプログラミング言語であると言われています。だからこそJavaScriptに関して知っておかなければならないことがあります。次にそれらについて説明しましょう。

> 注意：TypeScriptはJavaScriptのスーパーセット(上位互換)であり、JavaScriptにコンパイラやIDEで使う型情報が付いただけのものです


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://typescript-jp.gitbook.io/deep-dive/recap.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
