私:

typescriptについて教えてください。書けるようになりたいです。
javascriptは書けます。
phpエンジニアです。

30分ほどで基礎を身につけたいです。


アシスタント:

了解です!TypeScript(TS)はJavaScript(JS)のスーパーセットで、型(Type)を使えるのが最大の特徴です。PHPエンジニアでJSが書けるなら、めちゃくちゃスムーズに理解できますよ。30分で基礎を身につけられるよう、ポイントを絞ってお伝えします。


🔰 TypeScript 超入門(30分で基礎)

✅ 1. TypeScriptとは?

  • JavaScriptに型の仕組みを追加した言語。
  • tsc(TypeScript Compiler)で .ts.js に変換して使います。
  • 型安全になるので、開発時にエラーが見つけやすく、保守性も上がる。

✅ 2. 基本の型(Type)

let count: number = 10;
let username: string = '新倉';
let isAdmin: boolean = true;
let tags: string[] = ['php', 'ts'];
let scores: number[] = [90, 80, 70];

PHPとの比較イメージ:

$age = 30; // PHPでは型なしでも動くけど、TSは型を書く

✅ 3. 関数の型定義

function greet(name: string): string {
  return `Hello, ${name}`;
}

引数と戻り値に型をつけられる!

✅ 4. オブジェクトに型をつける(インターフェース)

interface User {
  id: number;
  name: string;
  email?: string; // ?は省略可能
}

const user: User = {
  id: 1,
  name: '新倉'
};

✅ 5. 型のユニオン・リテラル型

let status: 'draft' | 'published' = 'draft';

function printId(id: number | string) {
  console.log('ID:', id);
}

複数の型を許容したり、特定の値だけ許すこともできる。

✅ 6. 型エイリアス(type)

type PostStatus = 'draft' | 'published' | 'archived';

type Post = {
  id: number;
  title: string;
  status: PostStatus;
};

✅ 7. any と unknown(ざっくり)

let anything: any = 'なんでもアリ';
let safeValue: unknown = 'これは型チェックが必要';
  • any は使いすぎ注意(型チェックされない)
  • unknown は安全な any

✅ 8. クラスも書けます

class Person {
  constructor(private name: string) {}

  greet() {
    console.log(`Hi, I'm ${this.name}`);
  }
}

🔧 ちょい実践:簡単な関数

type Task = {
  id: number;
  title: string;
  done: boolean;
};

function completeTask(task: Task): Task {
  return { ...task, done: true };
}

✅ 開発に使うツール

  • tsc:TypeScriptのコンパイラ
  • ts-node:TSを直接実行できる
  • VS Code:型エラーを即時に教えてくれるのでおすすめ!

💡 まずやるべきこと

  1. VS Codeで .ts ファイルを作る
  2. 上のサンプルをコピペして動かしてみる
  3. 公式サイト or チュートリアルで手を動かす

📚 おすすめ教材(無料)


私:

VSCodeでどうやって動かせますか?


アシスタント:

ナイス質問です!VSCodeでTypeScriptを動かすには、簡単なセットアップが必要です。ここでは「ローカルで .ts ファイルを書いて、動かす」ための一番シンプルな方法を紹介します。


✅ Step 1: TypeScriptのインストール

mkdir my-ts-app
cd my-ts-app
npm init -y
npm install typescript --save-dev

✅ Step 2: 設定ファイルを作成

TypeScriptの設定ファイルを作ります。

npx tsc --init

これで tsconfig.json ができます(いろいろ書かれてますが、最初は気にしなくてOK)。


✅ Step 3: .ts ファイルを作る

VSCodeで index.ts を作って、こんなコードを書いてみましょう:

function greet(name: string): string {
  return `Hello, ${name}!`;
}

console.log(greet("新倉"));

✅ Step 4: TypeScriptをコンパイルしてJSにする

以下のコマンドを実行します:

npx tsc

すると、index.js が出力されます(内容はJSに変換されたもの)。


✅ Step 5: 実行する

Node.jsを使って実行します。

node index.js

💡 もし node がない場合は Node.js公式サイト からインストールしてください。


ファイル保存時に自動でJSに変換するには?

npx tsc --watch

これで .ts ファイルを保存するたびに、自動で .js に変換されます。開発がスムーズになります!

✅ BONUS:ts-node を使うともっとラク!

npm install -D ts-node
npx ts-node index.ts

これなら .js に変換せずに直接 .ts を実行できます!


私:

npxってなんですか?


アシスタント:

いいところに気づきましたね!npx は初心者がつまずきやすいポイントでもあるので、簡単にわかりやすく説明しますね。


🔧 npxとは?

npx は Node.jsに付属しているコマンドで、

📦 「ローカル or 一時的にインストールされたパッケージ(npmのコマンド)を、簡単に実行するためのもの」


🎯 例で理解する!

npx tsc

これは、「プロジェクトにインストールされている typescripttsc コマンド(コンパイラ)を実行する」という意味です。

  • 🔸 自分のPCにグローバルインストールしてなくてもOK
  • 🔸 node_modules/.bin/tsc を内部的に実行してくれます

🤔 なぜ npx が便利なの?

  • グローバルインストール不要
    • → npm install -g typescript しなくていい
  • プロジェクトごとのバージョンが使える
    • → そのプロジェクトで使ってるバージョンだけ使える

📌 使いどころの例

やりたいこと コマンド
TypeScriptをコンパイルする npx tsc
初期設定ファイルを作る npx tsc –init
TSを直接実行する npx ts-node index.ts

☝️ npm との違い

npm npx
パッケージをインストール コマンドを実行
例: npm install typescript 例: npx tsc

TypeScriptの学習中は npx tscnpx ts-node を使うことがよくあります!


私:

なるほど。他にtypescriptで理解しておくべき点はありますか?


アシスタント:

おお、いい感じに理解深まってますね!🎯
JavaScript経験者&PHPエンジニアのあなたが、TypeScriptを使いこなすために “本当に押さえておきたいポイント” をまとめます。


✅ TypeScriptで理解すべき5つの重要ポイント


1. 型の使いどころ(迷ったら使うべき場面)

TypeScriptでは 「どこに型をつけるべきか?」 が大事です。

✅ 関数の引数と戻り値
✅ APIレスポンスなどのオブジェクト構造
✅ 状態(state)として保持するデータ

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

2. 型の再利用(interface / type)

何度も使う構造は interface または type で定義して使い回すと便利です。

type User = {
  id: number;
  name: string;
  email?: string; // 省略可
};

function sendEmail(user: User) {
  console.log(user.email);
}

3. 型推論を活かす

TypeScriptはすごく賢くて、代入した値から型を「推論」してくれます。

let count = 1; // → 自動的に number 型になる

なので、無理に全部に型を書かなくてもOK!
ただし、関数の引数や戻り値、外部とのインターフェースには明示しましょう。


4. Enum・リテラル型を使うと堅牢に

type Status = 'draft' | 'published' | 'archived';

function publish(status: Status) {
  // statusは3つのどれかしか受け取れない
}

これはAPIのstatus管理とか、Vueの表示切り替えなどで大活躍します。


5. ユニオン型 / インターセクション型(応用だけど便利)

// ユニオン型
function printId(id: number | string) {
  console.log(id);
}

// インターセクション型(&)
type A = { foo: string };
type B = { bar: number };
type AB = A & B; // 両方の型を満たす

条件分岐・型分岐がしやすくなるので、コードが安全&読みやすくなります。


👀 他にも知っておくと便利なワード

概念 説明
Partial<T> 全てのプロパティを省略可にする
Readonly<T> 読み取り専用にする
Record<K, T> キーと値の型をセットで定義できる
Pick<T, K> 特定のプロパティだけ取り出す
Omit<T, K> 特定のプロパティを除外する
type User = { id: number; name: string; email: string };
type UserName = Pick<User, 'name'>;

PHPの配列操作とか連想配列のキー制御が好きなら、かなり気に入るはずです。


🧠 実践でやっておきたいこと

  • 簡単なTodoアプリ(配列+オブジェクト操作)
  • APIレスポンスを型定義して扱う
  • VueやReactと組み合わせて使う(めちゃくちゃ相性良い)

TypeScriptって、最初はちょっと堅く見えるけど、わかってくると 「壊れないJS」 を書ける安心感がクセになります。

「これ実装するときTSでどう書けばいい?」みたいなのがあったら、実際のコード一緒に書いてみましょうか?
実務ベースで学ぶと早いです!

私:

type UserName = Pick<User, ‘name’>; は type UserName = User.name; ではダメなの? と思ったけど、型をセットしてるのか。


アシスタント:

おおっ、その気づき、めちゃくちゃ鋭いです!!💡
そうなんです、まさにあなたが言った通り、

「型をセットしてる」

っていうのが超重要なポイントです。


🔍 比較してみましょう

type User = {
  id: number;
  name: string;
  email: string;
};

❌ これはエラーになる:

// ❌ これは型じゃなくてプロパティアクセスだからダメ
type UserName = User.name;

↑ これは「User という型の中の name を取り出す」つもりなんだけど、TypeScriptはそれを直接やらせてくれません。


✅ こっちが正解:

type UserName = Pick<User, 'name'>;

これはこういう意味です:

  • Pick<T, K> は「T型からKのキーだけを持つ型を作る」
  • 結果として { name: string } という型になる

☝️ じゃあ「name の型だけ欲しい」ってときは?

type UserNameOnly = User['name']; // string

これは インデックスアクセス型 といって、型の中から型だけを取り出せます。

User['name']string 型を返す
Pick<User, 'name'>{ name: string } 型を返す


✅ まとめると:

書き方 結果の型 使いたい場面
User['name'] string 値の型だけほしい
Pick<User, 'name'> { name: string } オブジェクトとして使いたい
Omit<User, 'email'> { id, name } 特定のプロパティを除外

この辺りに慣れてくると、TSの型を「型安全なレゴブロック」みたいに組み立てて使えるようになります🧱 他にも「この型どうやって抜き出すの?」とか「Form入力用の型だけ作りたい」とかあったらぜひ聞いてください〜!


私:

User[‘name’] これで型が取得できるんですね! phpだと連想配列で値が取れるのでややこしいですね!


アシスタント:

まさにそれです!!👏✨
PHPの連想配列で慣れてると、User['name'] が値を取る構文に見えちゃいますよね!でもTypeScriptでは「型の世界」なんです。


💡 簡単に言うと:

言語 User['name'] の意味
PHP 配列から値を取り出す(実行時)
TypeScript 型から型を取り出す(コンパイル時)

✅ TypeScriptでの使いどころ

type User = {
  id: number;
  name: string;
  email: string;
};

type UserName = User['name']; // 👈 string型になる

これを使うと、元の型から安全に一貫性を保てます。たとえば、入力フォームやバリデーションなどで部分的に型を使いたいときに超便利。


✅ まとめ

やりたいこと PHP TypeScript
値を取得 $user['name'] user.name(実行時)
プロパティ名の型を取得(string型) User['name']
プロパティだけを抽出した型を作る Pick<User, 'name'>

この違いを意識すると、TSの型操作がグッと分かりやすくなります!

私:

ありがとうございました!