0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

TypeScriptって何なの?

Posted at

TypeScriptって何?

TypeScript(TS)は、JavaScriptをパワーアップさせたプログラミング言語 だよ!
簡単に言うと、JavaScriptに「型(Type)」をつけられるようにしたもの


💡 JavaScriptとTypeScriptの違い

JavaScript(JS)は「どんな型のデータでも自由に扱える」けど、それが バグの原因 になりやすい。
TypeScript(TS)は「型を決めておくことで、間違ったデータを入れないようにする」ことができる!

📝 JavaScript(型のチェックがない)

let age = 25;   // ここでは数字
age = "hello";  // 文字列にしてもエラーにならない(実行時にバグる可能性あり)

JSは型チェックがないので、間違っても動いてしまう...💀

✅ TypeScript(型を指定できる!)

let age: number = 25;  // age は「数値型」だと決める
age = "hello";  // ❌ エラーになる!(バグを防げる)

TSは「数字の変数に文字を入れようとしてるよ!」とエラーを出してくれる🎯


✅ TypeScriptのメリット

1. 型チェックでバグを防げる!

function add(a: number, b: number): number {
  return a + b;
}

add(5, 10);   // ✅ OK
add("5", 10); // ❌ エラー(文字列はダメ!)

間違ったデータを入れたら事前にエラーが出るから、安心!


2. コードがわかりやすくなる!

function greet(name: string): string {
  return "Hello, " + name;
}

「nameは文字列」「戻り値も文字列」とハッキリわかるので、理解しやすい!


3. 自動補完が強力になる!

TypeScriptは型情報があるので、VS Codeなどのエディタで補完がしっかり効く

const user = {
  name: "Alice",
  age: 30
};

console.log(user.); // ← 名前や年齢の補完が出てくる!

「このオブジェクトにはどんなプロパティがあるんだっけ?」を一発で確認できる!


✅ TypeScriptのデメリット

1. 書くのがちょっと面倒

型を明示的に書かないといけないので、コードが長くなることがある。

let name: string = "Alice"; // TS(型を書く必要がある)
let name = "Alice"; // JS(シンプル)

2. コンパイルが必要

TypeScriptのコードは そのままではブラウザで動かせない
👉 「TypeScript → JavaScript」 に変換(コンパイル)しないといけない。

tsc myfile.ts  # TypeScriptをJavaScriptに変換するコマンド

手間はかかるけど、その分バグを減らせる!


✅ TypeScriptを使うべき人

  • JavaScriptのバグに困っている人
  • 大規模なプロジェクトを作る人
  • チーム開発をする人
  • VueやReactなどのフレームワークをしっかり使いたい人

👉 「小さいプロジェクト」ならJSで十分だけど、「大きなプロジェクト」ならTSを使ったほうが安全! 🚀


📌 まとめ

JavaScript(JS) TypeScript(TS)
型チェック なし(自由だけどバグりやすい) あり(バグを減らせる)
実行前のエラー検出 できない できる
コードの分かりやすさ 型が分かりにくい 型があるので明確
エディタの補完 弱め 強力
コンパイル いらない 必要(JSに変換する)

🎯 つまり、TypeScriptは「バグを減らして、安全に開発できるJavaScript」ってこと!
小規模ならJavaScript、大規模ならTypeScriptがオススメだよ! 🚀

Vue2、Vue2(vue-property-decorator)、Vue3 の script の書き方の違いを分かりやすく説明するね!


1. Vue2(オブジェクト構文)

Vue2では、コンポーネントは 「オブジェクトの形」 で書くのが一般的。

<script>
export default {
  data() {
    return {
      message: "Hello, Vue2!"
    };
  },
  methods: {
    sayHello() {
      console.log(this.message);
    }
  }
};
</script>

💡ポイント

  • export default {} の中に data()methods を書く。
  • data() は「データの箱」を作る関数。
  • methods の中に関数(sayHello など)を書く。

2. Vue2(vue-property-decorator を使う場合)

TypeScriptを使いたいときに vue-property-decorator を入れると、「クラスの形」 で書けるようになる。

<script lang="ts">
import { Vue, Component } from "vue-property-decorator";

@Component
export default class MyComponent extends Vue {
  message: string = "Hello, Vue2 with Decorators!";

  sayHello() {
    console.log(this.message);
  }
}
</script>

💡ポイント

  • @Component を使って、Vueのコンポーネントを クラスの形 にする。
  • messagedata() ではなく クラスのプロパティ として書く。
  • 関数(sayHello)は methods の中に書かず、クラスのメソッドとしてそのまま書ける。

3. Vue3(Composition API の場合)

Vue3では、新しい Composition API を使って、データと関数を setup() の中で定義することができる。

<script setup>
import { ref } from "vue";

const message = ref("Hello, Vue3!");

const sayHello = () => {
  console.log(message.value);
};
</script>

💡ポイント

  • setup() を書かずに、いきなり const でデータを作れる。
  • ref("データ") を使うと、Vueがデータをちゃんと監視できる。
  • message.value で値を取り出す(Vue2の this.message と同じ)。
  • 短く書ける & 分かりやすい!

まとめ

Vue2(オブジェクト構文) Vue2(クラス構文 + Decorators) Vue3(Composition API)
データの書き方 data() { return { message: "Hello!" }; } message: string = "Hello!"; const message = ref("Hello!");
関数の書き方 methods: { sayHello() { console.log(this.message); } } sayHello() { console.log(this.message); } const sayHello = () => { console.log(message.value); };
Vue特有の書き方 export default {} の中に書く クラス export default class extends Vue setup で変数を作る

どれを使うべき?

  • Vue2(オブジェクト構文) → Vue2の基本の書き方。シンプルで分かりやすい。
  • Vue2(クラス構文 + Decorators) → TypeScriptを使いたいときに便利。大規模開発向け。
  • Vue3(Composition API) → Vue3では setup を使うのが主流。短く書けて分かりやすい。

Vue3を使うなら script setup が一番シンプルでおすすめ! 🚀

クラス構文自体のメリットではなく、「TypeScriptと相性が良い」ことがメリット だね!

✅ TypeScriptの型チェックでバグを防げるのはなぜ?

クラス構文を使うと、TypeScriptの機能を活かしやすくなるから。
特に以下のような 「型に関するバグ」 を防ぐのに役立つ!


1. this の型を明確にできる

オブジェクト構文だと this の型が曖昧で、間違えてもエラーにならないことがある。
でも、クラス構文なら this の型が MyComponent だと明確に分かる から、間違いを防げる!

オブジェクト構文(間違えてもエラーにならない)

<script>
export default {
  data() {
    return {
      count: 10
    };
  },
  methods: {
    increaseCount() {
      this.count += "10"; // 文字列を足してしまうバグ!でもエラーにならない
    }
  }
};
</script>

this.count"10" を足してしまっても、Vueは特に何も言わない😱


クラス構文(間違えたらエラーになる)

<script lang="ts">
import { Vue, Component } from "vue-property-decorator";

@Component
export default class MyComponent extends Vue {
  count: number = 10; // 型を指定!

  increaseCount() {
    this.count += "10"; // ❌ TypeScriptがエラーを出してくれる!
  }
}
</script>

TypeScriptが「数値に文字列を足すのはおかしい!」とエラーを出してくれる! 🔥


2. props の型チェックができる

オブジェクト構文では props の型チェックは type で設定するけど、
クラス構文なら TypeScript の型チェックが使える!

オブジェクト構文(型チェックが甘い)

<script>
export default {
  props: {
    age: Number // `type: Number` だけでは詳細なチェックができない
  }
};
</script>

本当は age を必須にしたかったのに、 undefined でもエラーにならない...


クラス構文(しっかり型チェックできる)

<script lang="ts">
import { Vue, Component, Prop } from "vue-property-decorator";

@Component
export default class MyComponent extends Vue {
  @Prop({ required: true }) age!: number; // `age` は必須で、型は `number`
}
</script>

必須 (required: true) なのに undefined だったらエラーになる! 👍


3. Vuex でも型チェックができる

Vuex の stateactions を使うとき、オブジェクト構文だと型が分かりにくいけど、
クラス構文なら @State@Action に型をつけられる!

オブジェクト構文(Vuexの型が分かりにくい)

<script>
import { mapState, mapActions } from "vuex";

export default {
  computed: {
    ...mapState(["count"]) // 型が曖昧
  },
  methods: {
    ...mapActions(["increaseCount"]) // 型が分からない
  }
};
</script>

countnumber なのか string なのか、分からない...


クラス構文(Vuexの型をしっかり指定できる)

<script lang="ts">
import { Vue, Component } from "vue-property-decorator";
import { State, Action } from "vuex-class";

@Component
export default class MyComponent extends Vue {
  @State count!: number; // `count` は `number` 型
  @Action increaseCount!: () => void; // `increaseCount` は関数
}
</script>

Vuexのデータや関数の型がハッキリして、ミスを防げる!


結論

✅ クラス構文のメリットは 「TypeScriptと相性が良いこと」
型チェックができるから、間違いを防ぎやすい!
大規模開発でも安心して使える!

つまり、クラス構文のメリットの1つが「TypeScriptの型チェックを活かせること」 って感じだね! 😃

クラス構文のメリットの1つが「TypeScriptの型チェックを活かせること」なのは、 TypeScriptがもともとクラスベースのプログラミングに最適化されているから だよ!

✅ TypeScriptはクラスを前提にした仕組みを持っている

TypeScriptは JavaScriptの拡張版 で、クラスベースのプログラミング(OOP: オブジェクト指向プログラミング)をしっかりサポートしている。

クラス構文を使うと、TypeScriptの 型チェック を最大限活かせるようになる!


1. クラスのプロパティに型を明確に定義できる

Vueのオブジェクト構文 (data() {}) では、データの型をTypeScriptだけで完全に保証するのが難しい。
クラス構文を使うと、this.countnumber 型! と明確に宣言できる。

オブジェクト構文(型が不明確)

<script lang="ts">
export default {
  data() {
    return {
      count: 10, // 本当は `number` だけど、Vueは明確に型を保証できない
    };
  },
  methods: {
    increaseCount() {
      this.count += "10"; // ❌ エラーにならない(実行時にバグる)
    }
  }
};
</script>

TypeScriptは this.count の型をちゃんと推測できず、バグを防げない!


クラス構文(型が明確!)

<script lang="ts">
import { Vue, Component } from "vue-property-decorator";

@Component
export default class MyComponent extends Vue {
  count: number = 10; // 型をしっかり定義!

  increaseCount() {
    this.count += "10"; // ❌ TypeScriptがエラーを出してくれる!
  }
}
</script>

「countはnumber 型なのに、文字列を足そうとしてるよ!」とエラーになる!


2. クラスのメソッドも型チェックできる

Vueのオブジェクト構文では、メソッドの引数や戻り値の型を厳密にチェックしづらい。
クラス構文なら、TypeScriptの型チェックをフル活用できる。

オブジェクト構文(引数の型が保証されない)

<script lang="ts">
export default {
  methods: {
    add(x, y) { // ❌ 型が不明
      return x + y;
    }
  }
};
</script>

xystring を入れてもエラーにならない...


クラス構文(メソッドの型チェックができる!)

<script lang="ts">
import { Vue, Component } from "vue-property-decorator";

@Component
export default class MyComponent extends Vue {
  add(x: number, y: number): number {
    return x + y;
  }
}
</script>

xynumber 型じゃないとエラー!型ミスを防げる!


3. Vueのprops の型チェックが強力になる

オブジェクト構文では、props の型チェックは type: String などで指定するが、TypeScriptの型ほど厳密じゃない。

オブジェクト構文(型チェックがゆるい)

<script lang="ts">
export default {
  props: {
    age: Number // `undefined` や `null` でもエラーにならないことがある
  }
};
</script>

意図せず nullundefined が入ることも...


クラス構文(型チェックがしっかりできる!)

<script lang="ts">
import { Vue, Component, Prop } from "vue-property-decorator";

@Component
export default class MyComponent extends Vue {
  @Prop({ required: true }) age!: number; // `age` は `number` で、必須!
}
</script>

number じゃない値が来たらエラー!型のミスを防げる!


💡 なぜクラス構文だとTypeScriptの型チェックを活かせるのか?

✅ クラス構文は「型を明示的に書ける」

  • クラスのプロパティに型を直接指定できる
  • メソッドの引数や戻り値に型を指定できる
  • Vuexのstateactionsにも型をつけられる
  • this の型が保証されるので、型推論のミスが減る

📌 結論

クラス構文のメリットの1つが「TypeScriptの型チェックを活かせること」なのは、TypeScriptがもともとクラスベースのプログラミングに最適化されているから! 🎯

✅ 型を明示的に定義できる
✅ メソッドやプロパティの型チェックができる
this の型が保証される

だから、大規模開発やバグを減らしたいときに 「Vue2 + クラス構文 + TypeScript」 がよく使われるんだ! 😊

TypeScriptとオブジェクト構文(Options API)の組み合わせも 可能 だよ!
ただし、クラス構文に比べると 型チェックの力をフルに活かしにくい というデメリットがある。


✅ TypeScript + オブジェクト構文(Options API)の例

<script lang="ts">
export default {
  data() {
    return {
      count: 0 as number, // 型アノテーションをつけることで型を指定
    };
  },
  methods: {
    add(x: number, y: number): number { 
      return x + y;
    }
  }
};
</script>

🌟 特徴

  • 型アノテーション (as number など) を使えば、一応型を指定できる
  • methods に型を指定できる
  • Vue2, Vue3 どちらでも使える

💡 クラス構文との違い

比較項目 オブジェクト構文 + TypeScript クラス構文 + TypeScript
型の明示的な指定 手動で as 型 をつける必要がある クラスのプロパティに直接型を指定できる
this の型チェック this の型推論がうまくいかないことがある this の型が保証される
Vueの書き方 Vue2の伝統的な書き方 TypeScriptに最適化された書き方
メリット Vueの標準的な書き方に慣れている人にとってわかりやすい 型安全でバグを減らせる、大規模開発向け
デメリット 型チェックが甘くなることがある クラス構文に慣れていないと最初は難しく感じる

✅ どっちを使うべき?

  • Vue2 + TypeScriptクラス構文(vue-property-decorator) のほうがオススメ
  • Vue3 + TypeScriptComposition API(setup() の書き方) を使うほうが一般的

ただ、 小規模なプロジェクトならオブジェクト構文 + TypeScript でもOK だよ!

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?