<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>kinoblog</title>
	<atom:link href="https://kinonoteblog.com/feed" rel="self" type="application/rss+xml" />
	<link>https://kinonoteblog.com</link>
	<description></description>
	<lastBuildDate>Sun, 16 Aug 2026 05:12:02 +0000</lastBuildDate>
	<language>ja</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	
<atom:link rel="hub" href="https://pubsubhubbub.appspot.com"/>
<atom:link rel="hub" href="https://pubsubhubbub.superfeedr.com"/>
<atom:link rel="hub" href="https://websubhub.com/hub"/>
<atom:link rel="self" href="https://kinonoteblog.com/feed"/>
	<item>
		<title>TypeScriptのunion型とは？「AかBか」の型の書き方を初心者向けに解説</title>
		<link>https://kinonoteblog.com/programming/typescript-union-type?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=typescript-union-type</link>
					<comments>https://kinonoteblog.com/programming/typescript-union-type#respond</comments>
		
		<dc:creator><![CDATA[kino]]></dc:creator>
		<pubDate>Sun, 16 Aug 2026 05:03:29 +0000</pubDate>
				<category><![CDATA[プログラミング]]></category>
		<category><![CDATA[TypeScript]]></category>
		<guid isPermaLink="false">https://kinonoteblog.com/?p=3368</guid>

					<description><![CDATA[<p>&#160; TypeScriptのunion型とは TypeScriptのunion型（ユニオン型）とは、「AかBのどちらか」というように、複数の型のいずれかを表す型です。縦棒&#124;で型をつなげて書きます。 なぜunion...</p>
<p>The post <a href="https://kinonoteblog.com/programming/typescript-union-type">TypeScriptのunion型とは？「AかBか」の型の書き方を初心者向けに解説</a> first appeared on <a href="https://kinonoteblog.com">kinoblog</a>.</p>]]></description>
										<content:encoded><![CDATA[<p>&nbsp;</p>
<article style="font-family: 'Hiragino Sans','Yu Gothic',sans-serif; line-height: 1.8; max-width: 720px; margin: 40px auto; padding: 0 16px; color: #222;">
<h2 style="font-size: 1.3em; margin-top: 1.5em; border-left: 6px solid #3178c6; padding-left: 10px;">TypeScriptのunion型とは</h2>
<img fetchpriority="high" decoding="async" class="alignnone size-full wp-image-3369" src="https://kinonoteblog.com/wp-content/uploads/2026/08/typescript-union-type-diagram.webp" alt="TypeScriptのunion型（リテラル型）の仕組みの図解" width="1200" height="630" srcset="https://kinonoteblog.com/wp-content/uploads/2026/08/typescript-union-type-diagram.webp 1200w, https://kinonoteblog.com/wp-content/uploads/2026/08/typescript-union-type-diagram-300x158.webp 300w, https://kinonoteblog.com/wp-content/uploads/2026/08/typescript-union-type-diagram-1024x538.webp 1024w, https://kinonoteblog.com/wp-content/uploads/2026/08/typescript-union-type-diagram-768x403.webp 768w" sizes="(max-width: 1200px) 100vw, 1200px" />
<p><strong>TypeScriptのunion型（ユニオン型）とは、「AかBのどちらか」というように、複数の型のいずれかを表す型です。</strong>縦棒<code style="background: #f0f0f0; color: #24292e; padding: 0.1em 0.4em; border-radius: 3px;">|</code>で型をつなげて書きます。</p>
<div style="margin-bottom: 1.5em;"><div class="voice cf r big"><figure class="icon"><img decoding="async" src="https://kinonoteblog.com/wp-content/uploads/2020/07/pose_aseru_.png"><figcaption class="name">少年A</figcaption></figure><div class="voicecomment">
&#8220;success&#8221; | &#8220;error&#8221; みたいな縦棒でつなぐやつ、あれ何なの？</div></div>
<div class="voice cf l big"><figure class="icon"><img decoding="async" src="https://kinonoteblog.com/wp-content/uploads/2019/03/nigaoemaker.png"><figcaption class="name">キノ</figcaption></figure><div class="voicecomment">
それがunion型。実務だと状態管理とかで毎日のように使うから、押さえておくと強いよ</div></div></div>
<h2 style="font-size: 1.3em; margin-top: 2em; border-left: 6px solid #3178c6; padding-left: 10px;">なぜunion型が必要なのか</h2>
<p>1つの値が「複数の型のどれか」になる場面は、実務でよくあります。例えば、入力欄に入れるIDが「数値のときも文字列のときもある」といったケースです。</p>
<pre style="background: #f6f8fa; color: #24292e; padding: 1em; border-radius: 6px; overflow-x: auto; font-size: 0.9em; border: 1px solid #e1e4e8;"><code style="background: none; color: #24292e;">// numberでもstringでも受け取りたい
function printId(id: number | string) {
  console.log(`IDは${id}です`);
}

printId(123);      // OK
printId("abc123"); // OK</code></pre>
<p><code style="background: #f0f0f0; color: #24292e; padding: 0.1em 0.4em; border-radius: 3px;">number | string</code>と書くことで、「numberかstringのどちらか」を受け取れる関数になります。union型がないと、型ごとに関数を分けて書く必要が出てしまいます。</p>
<h2 style="font-size: 1.3em; margin-top: 2em; border-left: 6px solid #3178c6; padding-left: 10px;">リテラル型とは</h2>
<p>union型と一緒によく使われるのが「リテラル型」です。リテラル型とは、<code style="background: #f0f0f0; color: #24292e; padding: 0.1em 0.4em; border-radius: 3px;">string</code>や<code style="background: #f0f0f0; color: #24292e; padding: 0.1em 0.4em; border-radius: 3px;">number</code>のような広い型ではなく、<strong>「特定の値そのもの」を型にしたもの</strong>です。</p>
<pre style="background: #f6f8fa; color: #24292e; padding: 1em; border-radius: 6px; overflow-x: auto; font-size: 0.9em; border: 1px solid #e1e4e8;"><code style="background: none; color: #24292e;">let status: "success"; // "success"という文字列しか入れられない型
status = "success"; // OK
status = "error";   // Error: Type '"error"' is not assignable to type '"success"'.</code></pre>
<p>単体だとあまり使い道がなさそうですが、union型と組み合わせると一気に実用的になります。</p>
<h2 style="font-size: 1.3em; margin-top: 2em; border-left: 6px solid #3178c6; padding-left: 10px;">union型×リテラル型が実務で最強な理由</h2>
<p>リテラル型をunion型でつなぐと、「決められた選択肢のどれか」を表現できます。</p>
<pre style="background: #f6f8fa; color: #24292e; padding: 1em; border-radius: 6px; overflow-x: auto; font-size: 0.9em; border: 1px solid #e1e4e8;"><code style="background: none; color: #24292e;">type Status = "loading" | "success" | "error";

function showMessage(status: Status) {
  // statusには この3つ以外は渡せない
}

showMessage("success"); // OK
showMessage("finish");  // Error: 決められた値以外は渡せない</code></pre>
<p>API通信の状態（読み込み中・成功・失敗）や、ボタンの種類（primary・secondaryなど）のように、「あらかじめ決まった値のどれか」を扱う場面で大活躍します。文字列を直接比較するより、タイプミスをコンパイル時に防げるのが大きなメリットです。この書き方はtypeでしか書けないので、interfaceとの使い分けも押さえておくとよいです。</p>
<div class="linkcard"><div class="lkc-internal-wrap"><a class="lkc-link no_icon" href="https://kinonoteblog.com/programming/typescript-interface-vs-type" data-lkc-id="1"><div class="lkc-card"><div class="lkc-info"><div class="lkc-favicon"><img decoding="async" src="https://www.google.com/s2/favicons?domain=kinonoteblog.com" alt="" width="16" height="16" /></div><div class="lkc-domain">kinoblog</div></div><div class="lkc-content"><figure class="lkc-thumbnail"><img decoding="async" class="lkc-thumbnail-img" src="//kinonoteblog.com/wp-content/uploads/2026/07/TypeScriptのinterfaceとtypeの違いを、JavaScript経験者が理解するまで-150x150.jpg" width="100px" height="80px" alt="" /></figure><div class="lkc-title">TypeScriptのinterfaceとtypeの違いを、JavaScript経験者が理解するまで</div><div class="lkc-date">&#x1f552;&#xfe0f;2026年7月18日</div><div class="lkc-excerpt">&nbsp;前回、TypeScriptを学び始めて最初につまずいたポイントをいくつか紹介しました。その中でも特に地味に時間を取られたのが、interfaceとtypeの使い分けです。JavaScriptは元々そこそこ書けていたので、「型を書く」という発想自体には早く慣れました。ただ、その分「なぜ同じようなことができる書き方が2種類あるのか」がかえって気になり、調べるのに時間がかかりました。この記事では、実際のコード例をもとに違いを整理します。JavaScript経験者ほど「どっちでもよくない？」と感じる理由JavaScriptにはそもそも型という概念...</div></div><div class="clear"></div></div></a></div></div>
<h2 style="font-size: 1.3em; margin-top: 2em; border-left: 6px solid #3178c6; padding-left: 10px;">union型の値を安全に使う（型の絞り込み）</h2>
<p>union型の値をそのまま使おうとすると、エラーになることがあります。</p>
<pre style="background: #f6f8fa; color: #24292e; padding: 1em; border-radius: 6px; overflow-x: auto; font-size: 0.9em; border: 1px solid #e1e4e8;"><code style="background: none; color: #24292e;">function printId(id: number | string) {
  console.log(id.toUpperCase());
  // Error: Property 'toUpperCase' does not exist on type 'number'.
}</code></pre>
<p><code style="background: #f0f0f0; color: #24292e; padding: 0.1em 0.4em; border-radius: 3px;">toUpperCase</code>は文字列のメソッドなので、numberの可能性がある<code style="background: #f0f0f0; color: #24292e; padding: 0.1em 0.4em; border-radius: 3px;">id</code>には使えません。こういうときは、<code style="background: #f0f0f0; color: #24292e; padding: 0.1em 0.4em; border-radius: 3px;">typeof</code>で型を確認してから使います（型の絞り込み）。</p>
<pre style="background: #f6f8fa; color: #24292e; padding: 1em; border-radius: 6px; overflow-x: auto; font-size: 0.9em; border: 1px solid #e1e4e8;"><code style="background: none; color: #24292e;">function printId(id: number | string) {
  if (typeof id === "string") {
    console.log(id.toUpperCase()); // ここではstringとして扱える
  } else {
    console.log(id); // ここではnumber
  }
}</code></pre>
<p>この「使う前に型を確認する」考え方は、any・unknownの記事でも解説しています。union型でも同じ型ガードの考え方が使えます。</p>
<div class="linkcard"><div class="lkc-internal-wrap"><a class="lkc-link no_icon" href="https://kinonoteblog.com/programming/typescript-any-unknown" data-lkc-id="3"><div class="lkc-card"><div class="lkc-info"><div class="lkc-favicon"><img decoding="async" src="https://www.google.com/s2/favicons?domain=kinonoteblog.com" alt="" width="16" height="16" /></div><div class="lkc-domain">kinoblog</div></div><div class="lkc-content"><figure class="lkc-thumbnail"><img decoding="async" class="lkc-thumbnail-img" src="//kinonoteblog.com/wp-content/uploads/2026/07/The-eye-should-learn-to-listen-before-it-looks.のコピーのコピーのコピーのコピーのコピー-1-1-150x150.jpg" width="100px" height="80px" alt="" /></figure><div class="lkc-title">TypeScriptのanyとunknownの違い｜どっちも避けるべき？初心者向け整理</div><div class="lkc-date">&#x1f552;&#xfe0f;2026年7月19日</div><div class="lkc-excerpt">&nbsp;「anyは使うな」って言われたから、じゃあ型がわからない時どうすんの？それ、まさに自分がハマった疑問。答えは「unknown」って型だったんだ「anyは使うな」で終わっていた理解前々回、TypeScriptでanyを使うと型チェックが効かなくなる、という話をしました。ただ、そのときの自分は「anyを使わなければとりあえず安全」くらいの理解で止まっていました。実際にコードを書き進めていくと、「型が何になるか分からないけど、anyは使いたくない」という場面に何度も遭遇しました。そこで出てくるのがunknownという型です。anyとu...</div></div><div class="clear"></div></div></a></div></div>
<h2 style="font-size: 1.3em; margin-top: 2em; border-left: 6px solid #3178c6; padding-left: 10px;">Reactでの使用例</h2>
<p>ReactでAPI通信の状態を管理するとき、union型のリテラル型が定番の書き方になります。</p>
<pre style="background: #f6f8fa; color: #24292e; padding: 1em; border-radius: 6px; overflow-x: auto; font-size: 0.9em; border: 1px solid #e1e4e8;"><code style="background: none; color: #24292e;">type Status = "loading" | "success" | "error";

const [status, setStatus] = useState("loading");

// statusには決められた3つの値しか入らないので、
// タイプミスや想定外の値を防げる</code></pre>
<p>API通信の型については、こちらの記事も参考になります。</p>
<div class="linkcard"><div class="lkc-internal-wrap"><a class="lkc-link no_icon" href="https://kinonoteblog.com/programming/typescript-promise-api" data-lkc-id="11"><div class="lkc-card"><div class="lkc-info"><div class="lkc-favicon"><img decoding="async" src="https://www.google.com/s2/favicons?domain=kinonoteblog.com" alt="" width="16" height="16" /></div><div class="lkc-domain">kinoblog</div></div><div class="lkc-content"><figure class="lkc-thumbnail"><img decoding="async" class="lkc-thumbnail-img" src="//kinonoteblog.com/wp-content/uploads/2026/08/The-eye-should-learn-to-listen-before-it-looks.のコピーのコピーのコピーのコピーのコピー-2-150x150.jpg" width="100px" height="80px" alt="" /></figure><div class="lkc-title">TypeScriptのPromiseとは？API通信の型定義を初心者向けに解説</div><div class="lkc-date">&#x1f552;&#xfe0f;2026年8月1日</div><div class="lkc-excerpt">&nbsp;TypeScriptのPromise&lt;T&gt;とはTypeScriptのPromise&lt;T&gt;とは、非同期処理が最終的に返す値の型を指定する書き方です。API通信の結果に型を付けることで、レスポンスの中身をエディタの補完付きで安全に扱えるようになります。fetchでAPI叩くとき、TypeScriptだと何が変わるの？一番変わるのは「返ってきたデータの中身をちゃんと型で管理できる」ところだよこの記事では、TypeScriptでAPI通信を扱うときに必ず出てくるPromise&lt;T&gt;について、fetchを使った実例をもとに解説します。ジェネリクスの基本がまだ不安な場...</div></div><div class="clear"></div></div></a></div></div>
<h2 style="font-size: 1.3em; margin-top: 2em; border-left: 6px solid #3178c6; padding-left: 10px;">union型とenumの違い</h2>
<p>「決められた値のどれか」を表す方法として、enumという書き方もあります。ざっくり言うと、union型のリテラル型の方がシンプルで、近年のReact開発ではこちらが好まれる傾向があります。</p>
<table style="width: 100%; border-collapse: collapse; margin: 1em 0; font-size: 0.95em;">
<thead>
<tr style="background: #f6f8fa;">
<th style="border: 1px solid #e1e4e8; padding: 0.6em; text-align: left;">項目</th>
<th style="border: 1px solid #e1e4e8; padding: 0.6em; text-align: left;">union型（リテラル型）</th>
<th style="border: 1px solid #e1e4e8; padding: 0.6em; text-align: left;">enum</th>
</tr>
</thead>
<tbody>
<tr>
<td style="border: 1px solid #e1e4e8; padding: 0.6em;">書き方</td>
<td style="border: 1px solid #e1e4e8; padding: 0.6em;">シンプル（1行で書ける）</td>
<td style="border: 1px solid #e1e4e8; padding: 0.6em;">やや冗長</td>
</tr>
<tr>
<td style="border: 1px solid #e1e4e8; padding: 0.6em;">コンパイル後</td>
<td style="border: 1px solid #e1e4e8; padding: 0.6em;">余分なコードが残らない</td>
<td style="border: 1px solid #e1e4e8; padding: 0.6em;">実体のあるコードが生成される</td>
</tr>
</tbody>
</table>
<p>enum自体については、別の記事で改めて詳しく解説する予定です。まずはunion型のリテラル型を使いこなせるようにしておけば十分です。</p>
<h2 style="font-size: 1.3em; margin-top: 2em; border-left: 6px solid #3178c6; padding-left: 10px;">よくあるエラー</h2>
<pre style="background: #f6f8fa; color: #24292e; padding: 1em; border-radius: 6px; overflow-x: auto; font-size: 0.9em; border: 1px solid #e1e4e8;"><code style="background: none; color: #24292e;">type Status = "success" | "error";
const s: Status = "Success";
// Type '"Success"' is not assignable to type 'Status'.</code></pre>
<p>これは、大文字・小文字の違いで、決められたリテラル型に一致していないために起きるエラーです。union型のリテラル型は「値そのもの」を型にしているため、<code style="background: #f0f0f0; color: #24292e; padding: 0.1em 0.4em; border-radius: 3px;">"success"</code>と<code style="background: #f0f0f0; color: #24292e; padding: 0.1em 0.4em; border-radius: 3px;">"Success"</code>は別物として扱われます。定義した値と完全に一致しているか確認してみてください。</p>
<h2 style="font-size: 1.3em; margin-top: 2em; border-left: 6px solid #3178c6; padding-left: 10px;">よくある質問</h2>
<p><strong>Q. union型はいくつまで型をつなげられますか？</strong><br />
A. 個数に実用上の制限はありません。<code style="background: #f0f0f0; color: #24292e; padding: 0.1em 0.4em; border-radius: 3px;">"a" | "b" | "c" | "d"</code>のように必要なだけつなげられます。</p>
<p><strong>Q. リテラル型とunion型は違うものですか？</strong><br />
A. 別の概念です。リテラル型は「特定の値そのものの型」、union型は「複数の型のどれか」を表す型で、この2つを組み合わせて使うことが多いです。</p>
<p><strong>Q. union型とenum、どちらを使えばいいですか？</strong><br />
A. 近年のReact開発では、シンプルに書けるunion型のリテラル型が好まれる傾向があります。まずはこちらに慣れておけば困りません。</p>
<h2 style="font-size: 1.3em; margin-top: 2em; border-left: 6px solid #3178c6; padding-left: 10px;">まとめ</h2>
<ul>
<li>union型は<code style="background: #f0f0f0; color: #24292e; padding: 0.1em 0.4em; border-radius: 3px;">|</code>で複数の型をつなぎ、「AかBのどちらか」を表す型</li>
<li>リテラル型（特定の値の型）と組み合わせると、「決まった選択肢のどれか」を表現できる</li>
<li>union型の値を使うときは、typeofなどで型を絞り込んでから使う</li>
<li>ReactのAPI状態管理などで頻繁に使う、実務必須の書き方</li>
</ul>
<p>公式ドキュメントにも、union型についての詳しい解説があります。</p>
<p>&#x25b6; <a href="https://www.typescriptlang.org/docs/handbook/2/everyday-types.html#union-types" target="_blank" rel="noopener">TypeScript公式ドキュメント：Union Types</a></p>
<div style="margin: 1.5em 0;"><div class="voice cf r big"><figure class="icon"><img decoding="async" src="https://kinonoteblog.com/wp-content/uploads/2020/07/pose_aseru_.png"><figcaption class="name">少年A</figcaption></figure><div class="voicecomment">
&#8220;loading&#8221; | &#8220;success&#8221; | &#8220;error&#8221;、これは確かによく見るわ</div></div>
<div class="voice cf l big"><figure class="icon"><img decoding="async" src="https://kinonoteblog.com/wp-content/uploads/2019/03/nigaoemaker.png"><figcaption class="name">キノ</figcaption></figure><div class="voicecomment">
うん。この形を自分で書けるようになると、一気に「TypeScriptっぽいコード」が書けるようになるよ</div></div></div>
<hr style="margin: 2.5em 0; border: none; border-top: 1px solid #ddd;" />
</article>
<p>&nbsp;</p><p>The post <a href="https://kinonoteblog.com/programming/typescript-union-type">TypeScriptのunion型とは？「AかBか」の型の書き方を初心者向けに解説</a> first appeared on <a href="https://kinonoteblog.com">kinoblog</a>.</p>]]></content:encoded>
					
					<wfw:commentRss>https://kinonoteblog.com/programming/typescript-union-type/feed</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>TypeScriptの型アサーション（as）とは？使い方と注意点を初心者向けに解説</title>
		<link>https://kinonoteblog.com/programming/type-assertion?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=type-assertion</link>
					<comments>https://kinonoteblog.com/programming/type-assertion#respond</comments>
		
		<dc:creator><![CDATA[kino]]></dc:creator>
		<pubDate>Sat, 15 Aug 2026 03:46:30 +0000</pubDate>
				<category><![CDATA[プログラミング]]></category>
		<category><![CDATA[TypeScript]]></category>
		<guid isPermaLink="false">https://kinonoteblog.com/?p=3354</guid>

					<description><![CDATA[<p>&#160; TypeScriptの型アサーション（as）とは TypeScriptの型アサーションとは、asを使って「この値はこの型だ」と開発者側から指定する書き方です。TypeScriptの自動判定より、開発者が型を...</p>
<p>The post <a href="https://kinonoteblog.com/programming/type-assertion">TypeScriptの型アサーション（as）とは？使い方と注意点を初心者向けに解説</a> first appeared on <a href="https://kinonoteblog.com">kinoblog</a>.</p>]]></description>
										<content:encoded><![CDATA[<p>&nbsp;</p>
<article style="font-family: 'Hiragino Sans','Yu Gothic',sans-serif; line-height: 1.8; max-width: 720px; margin: 40px auto; padding: 0 16px; color: #222;">
<h2 style="font-size: 1.3em; margin-top: 1.5em; border-left: 6px solid #3178c6; padding-left: 10px;">TypeScriptの型アサーション（as）とは</h2>
<img decoding="async" class="alignnone size-full wp-image-3360" src="https://kinonoteblog.com/wp-content/uploads/2026/08/typescript-as-diagram.webp" alt="TypeScriptの型アサーション（as）の書き方の図解" width="1200" height="630" srcset="https://kinonoteblog.com/wp-content/uploads/2026/08/typescript-as-diagram.webp 1200w, https://kinonoteblog.com/wp-content/uploads/2026/08/typescript-as-diagram-300x158.webp 300w, https://kinonoteblog.com/wp-content/uploads/2026/08/typescript-as-diagram-1024x538.webp 1024w, https://kinonoteblog.com/wp-content/uploads/2026/08/typescript-as-diagram-768x403.webp 768w" sizes="(max-width: 1200px) 100vw, 1200px" />
<p><strong>TypeScriptの型アサーションとは、<code style="background: #f0f0f0; color: #24292e; padding: 0.1em 0.4em; border-radius: 3px;">as</code>を使って「この値はこの型だ」と開発者側から指定する書き方です。</strong>TypeScriptの自動判定より、開発者が型を分かっている場面で使います。</p>
<div style="margin-bottom: 1.5em;"><div class="voice cf r big"><figure class="icon"><img decoding="async" src="https://kinonoteblog.com/wp-content/uploads/2020/07/pose_aseru_.png"><figcaption class="name">少年A</figcaption></figure><div class="voicecomment">
コードでよく見る「as」って何なの？型を書いてるようには見えるけど</div></div>
<div class="voice cf l big"><figure class="icon"><img decoding="async" src="https://kinonoteblog.com/wp-content/uploads/2019/03/nigaoemaker.png"><figcaption class="name">キノ</figcaption></figure><div class="voicecomment">
便利なんだけど、使いすぎると危ない子でもあるんだ。今日は使いどころと注意点をセットで覚えよう</div></div></div>
<h2 style="font-size: 1.3em; margin-top: 2em; border-left: 6px solid #3178c6; padding-left: 10px;">なぜ型アサーションが必要なのか</h2>
<p>TypeScriptは多くの場合、値の型を自動で判定してくれます。しかし、TypeScriptより開発者の方が「この値の型」を正確に分かっている場面もあります。代表的なのが、HTMLの要素を取得する場面です。</p>
<pre style="background: #f6f8fa; color: #24292e; padding: 1em; border-radius: 6px; overflow-x: auto; font-size: 0.9em; border: 1px solid #e1e4e8;"><code style="background: none; color: #24292e;">const input = document.getElementById("email");
input.value; // Error: Property 'value' does not exist on type 'HTMLElement'.</code></pre>
<p>TypeScriptは<code style="background: #f0f0f0; color: #24292e; padding: 0.1em 0.4em; border-radius: 3px;">getElementById</code>の戻り値を「一般的なHTML要素（HTMLElement）」としか判断できず、それが入力欄（input）であることまでは分かりません。そのため<code style="background: #f0f0f0; color: #24292e; padding: 0.1em 0.4em; border-radius: 3px;">.value</code>にアクセスしようとするとエラーになります。こういうときに型アサーションを使います。</p>
<h2 style="font-size: 1.3em; margin-top: 2em; border-left: 6px solid #3178c6; padding-left: 10px;">型アサーション（as）の基本の書き方</h2>
<p>値の後ろに<code style="background: #f0f0f0; color: #24292e; padding: 0.1em 0.4em; border-radius: 3px;">as 型名</code>と書きます。</p>
<pre style="background: #f6f8fa; color: #24292e; padding: 1em; border-radius: 6px; overflow-x: auto; font-size: 0.9em; border: 1px solid #e1e4e8;"><code style="background: none; color: #24292e;">const input = document.getElementById("email") as HTMLInputElement;
input.value; // OK。inputはHTMLInputElementとして扱われる</code></pre>
<p>「この要素は入力欄（HTMLInputElement）だと、私は分かっている」とTypeScriptに伝えているイメージです。これでエラーが解消され、<code style="background: #f0f0f0; color: #24292e; padding: 0.1em 0.4em; border-radius: 3px;">.value</code>にアクセスできるようになります。</p>
<h2 style="font-size: 1.3em; margin-top: 2em; border-left: 6px solid #3178c6; padding-left: 10px;">型注釈との違い</h2>
<p>初心者が混乱しやすいのが、型注釈（<code style="background: #f0f0f0; color: #24292e; padding: 0.1em 0.4em; border-radius: 3px;">: 型名</code>）との違いです。この2つは似ているようで、役割が逆です。</p>
<table style="width: 100%; border-collapse: collapse; margin: 1em 0; font-size: 0.95em;">
<tbody>
<tr style="background: #f6f8fa;">
<th style="border: 1px solid #e1e4e8; padding: 0.6em; text-align: left;">書き方</th>
<th style="border: 1px solid #e1e4e8; padding: 0.6em; text-align: left;">役割</th>
</tr>
<tr>
<td style="border: 1px solid #e1e4e8; padding: 0.6em;">型注釈（: 型名）</td>
<td style="border: 1px solid #e1e4e8; padding: 0.6em;">「この型の値しか入れないで」とTypeScriptにチェックさせる</td>
</tr>
<tr>
<td style="border: 1px solid #e1e4e8; padding: 0.6em;">型アサーション（as 型名）</td>
<td style="border: 1px solid #e1e4e8; padding: 0.6em;">「この型として扱って」とチェックを上書きする</td>
</tr>
</tbody>
</table>
<p>型注釈は「TypeScriptに守らせるルール」、型アサーションは「開発者がTypeScriptの判断を上書きする指示」という違いです。型注釈の基本については、こちらの記事で解説しています。</p>
<div class="linkcard"><div class="lkc-internal-wrap"><a class="lkc-link no_icon" href="https://kinonoteblog.com/programming/typescript-type-annotation-basics" data-lkc-id="14"><div class="lkc-card"><div class="lkc-info"><div class="lkc-favicon"><img decoding="async" src="https://www.google.com/s2/favicons?domain=kinonoteblog.com" alt="" width="16" height="16" /></div><div class="lkc-domain">kinoblog</div></div><div class="lkc-content"><figure class="lkc-thumbnail"><img decoding="async" class="lkc-thumbnail-img" src="//kinonoteblog.com/wp-content/uploads/2026/08/The-eye-should-learn-to-listen-before-it-looks.のコピーのコピーのコピーのコピーのコピー-1-1-150x150.jpg" width="100px" height="80px" alt="" /></figure><div class="lkc-title">TypeScriptの変数・関数の型注釈とは？書き方を初心者向けに解説</div><div class="lkc-date">&#x1f552;&#xfe0f;2026年8月3日</div><div class="lkc-excerpt">&nbsp;TypeScriptの型注釈とはTypeScriptの型注釈とは、変数や関数に対して「どんな型の値を扱うか」を明示する書き方です。変数の後ろや関数の引数・戻り値に: 型名という形で記述します。コロンの後ろに型を書くってやつ、なんとなく真似して書いてるけど、ちゃんと理解できてないかも実はここ、応用が少なくて一番「型に慣れる」のに向いてる場所だから、今日はここだけ丁寧にやろうなぜ型注釈が必要なのかJavaScriptでは、変数にどんな値でも自由に代入できます。// JavaScriptlet price = 1000;price = &quot;1000円&quot;; // 数...</div></div><div class="clear"></div></div></a></div></div>
<h2 style="font-size: 1.3em; margin-top: 2em; border-left: 6px solid #3178c6; padding-left: 10px;">型アサーションを多用してはいけない理由</h2>
<p>asは便利ですが、多用は危険です。なぜなら、<strong>asは実際の値をチェックせず、TypeScriptの判断を強制的に上書きしてしまう</strong>からです。</p>
<pre style="background: #f6f8fa; color: #24292e; padding: 1em; border-radius: 6px; overflow-x: auto; font-size: 0.9em; border: 1px solid #e1e4e8;"><code style="background: none; color: #24292e;">const value = "kino" as unknown as number;
console.log(value.toFixed()); // 型エラーは出ないが、実行時にクラッシュする</code></pre>
<p>本当は文字列なのに「number型だ」と無理やり指定すると、TypeScriptはエラーを出しませんが、実行時にはエラーになります。asを使うと、TypeScriptがせっかく守ってくれていた型の安全性を、自分から手放してしまうことになります。「エラーが消えるから」という理由だけでasを使うのは避けるべきです。</p>
<h2 style="font-size: 1.3em; margin-top: 2em; border-left: 6px solid #3178c6; padding-left: 10px;">asの代わりに型ガードを使う</h2>
<p>「値が本当にその型か分からない」場合は、asで無理やり指定するのではなく、型を確認してから使う「型ガード」がおすすめです。</p>
<pre style="background: #f6f8fa; color: #24292e; padding: 1em; border-radius: 6px; overflow-x: auto; font-size: 0.9em; border: 1px solid #e1e4e8;"><code style="background: none; color: #24292e;">function printLength(value: unknown) {
  if (typeof value === "string") {
    console.log(value.length); // ここではstringとして安全に扱える
  }
}</code></pre>
<p>この「使う前に型を確認する」考え方は、any・unknownの記事でも詳しく解説しています。asと型ガードの使い分けを意識すると、より安全なコードが書けます。</p>
<div class="linkcard"><div class="lkc-internal-wrap"><a class="lkc-link no_icon" href="https://kinonoteblog.com/programming/typescript-any-unknown" data-lkc-id="3"><div class="lkc-card"><div class="lkc-info"><div class="lkc-favicon"><img decoding="async" src="https://www.google.com/s2/favicons?domain=kinonoteblog.com" alt="" width="16" height="16" /></div><div class="lkc-domain">kinoblog</div></div><div class="lkc-content"><figure class="lkc-thumbnail"><img decoding="async" class="lkc-thumbnail-img" src="//kinonoteblog.com/wp-content/uploads/2026/07/The-eye-should-learn-to-listen-before-it-looks.のコピーのコピーのコピーのコピーのコピー-1-1-150x150.jpg" width="100px" height="80px" alt="" /></figure><div class="lkc-title">TypeScriptのanyとunknownの違い｜どっちも避けるべき？初心者向け整理</div><div class="lkc-date">&#x1f552;&#xfe0f;2026年7月19日</div><div class="lkc-excerpt">&nbsp;「anyは使うな」って言われたから、じゃあ型がわからない時どうすんの？それ、まさに自分がハマった疑問。答えは「unknown」って型だったんだ「anyは使うな」で終わっていた理解前々回、TypeScriptでanyを使うと型チェックが効かなくなる、という話をしました。ただ、そのときの自分は「anyを使わなければとりあえず安全」くらいの理解で止まっていました。実際にコードを書き進めていくと、「型が何になるか分からないけど、anyは使いたくない」という場面に何度も遭遇しました。そこで出てくるのがunknownという型です。anyとu...</div></div><div class="clear"></div></div></a></div></div>
<h2 style="font-size: 1.3em; margin-top: 2em; border-left: 6px solid #3178c6; padding-left: 10px;">.tsxファイルでのasの書き方の注意</h2>
<p>前回の記事で少し触れましたが、<code style="background: #f0f0f0; color: #24292e; padding: 0.1em 0.4em; border-radius: 3px;">.tsx</code>ファイルでは、もう一つの型アサーションの書き方である<code style="background: #f0f0f0; color: #24292e; padding: 0.1em 0.4em; border-radius: 3px;">&lt;型名&gt;値</code>という記法が使えません。</p>
<pre style="background: #f6f8fa; color: #24292e; padding: 1em; border-radius: 6px; overflow-x: auto; font-size: 0.9em; border: 1px solid #e1e4e8;"><code style="background: none; color: #24292e;">// .tsファイルでは書けるが、.tsxファイルではJSXと衝突してエラーになる
const input = &lt;HTMLInputElement&gt;document.getElementById("email");

// .tsxファイルではこちら（as）を使う
const input2 = document.getElementById("email") as HTMLInputElement;</code></pre>
<p>Reactを書く<code style="background: #f0f0f0; color: #24292e; padding: 0.1em 0.4em; border-radius: 3px;">.tsx</code>ファイルでは、<code style="background: #f0f0f0; color: #24292e; padding: 0.1em 0.4em; border-radius: 3px;">&lt;型名&gt;</code>がJSXのタグと見分けがつかなくなるためです。実務ではどちらのファイルでも使える<code style="background: #f0f0f0; color: #24292e; padding: 0.1em 0.4em; border-radius: 3px;">as</code>の方に統一しておくのが無難です。tsxとtsの違いについては、こちらの記事も参考にしてください。</p>
<div class="linkcard"><div class="lkc-internal-wrap"><a class="lkc-link no_icon" href="https://kinonoteblog.com/programming/typescript-tsx-file" data-lkc-id="17"><div class="lkc-card"><div class="lkc-info"><div class="lkc-favicon"><img decoding="async" src="https://www.google.com/s2/favicons?domain=kinonoteblog.com" alt="" width="16" height="16" /></div><div class="lkc-domain">kinoblog</div></div><div class="lkc-content"><figure class="lkc-thumbnail"><img decoding="async" class="lkc-thumbnail-img" src="//kinonoteblog.com/wp-content/uploads/2026/08/The-eye-should-learn-to-listen-before-it-looks.のコピーのコピーのコピーのコピーのコピー-5-150x150.png" width="100px" height="80px" alt="" /></figure><div class="lkc-title">TypeScriptのtsxファイルとは？.tsとの違いを初心者向けに解説</div><div class="lkc-date">&#x1f552;&#xfe0f;2026年8月11日</div><div class="lkc-excerpt">&nbsp;TypeScriptのtsxファイルとはTypeScriptのtsxファイルとは、TypeScriptの中でReactのJSX構文（HTMLのようなタグを含む書き方）を使うための拡張子です。「TypeScript tsx とは何か」を一言で言えば、「TypeScript × JSX」を組み合わせたファイルという意味で、Reactの開発では欠かせない存在です。Reactのファイルって.tsのものと.tsxのものがあるけど、何が違うの？実はそこ、ルールを知らないと地味に詰まりやすいところだから、今日ははっきりさせておこうなぜ.tsと.tsxが分かれているのかTypeScriptのファイルには、大きく分...</div></div><div class="clear"></div></div></a></div></div>
<h2 style="font-size: 1.3em; margin-top: 2em; border-left: 6px solid #3178c6; padding-left: 10px;">よくあるエラー</h2>
<pre style="background: #f6f8fa; color: #24292e; padding: 1em; border-radius: 6px; overflow-x: auto; font-size: 0.9em; border: 1px solid #e1e4e8;"><code style="background: none; color: #24292e;">const value = "kino" as number;
// Conversion of type 'string' to type 'number' may be a mistake...</code></pre>
<p>これは、まったく関係のない型（stringからnumber）へ直接asで変換しようとしたときに出る警告です。TypeScriptが「それ、間違いじゃない？」と教えてくれています。そもそも別の型に変換したい場合は、asではなく<code style="background: #f0f0f0; color: #24292e; padding: 0.1em 0.4em; border-radius: 3px;">Number()</code>などの変換関数を使うのが正しい対処です。</p>
<h2 style="font-size: 1.3em; margin-top: 2em; border-left: 6px solid #3178c6; padding-left: 10px;">よくある質問</h2>
<p><strong>Q. 型アサーション（as）と型注釈（: 型名）はどう違いますか？</strong><br />
A. 型注釈は「この型でチェックして」という指示、型アサーションは「この型として扱って」とチェックを上書きする指示です。役割が逆です。</p>
<p><strong>Q. asはいつ使えばいいですか？</strong><br />
A. DOM要素の取得など、TypeScriptより開発者の方が型を確実に分かっている場面に限定して使うのがおすすめです。</p>
<p><strong>Q. エラーを消すためにasを使ってもいいですか？</strong><br />
A. おすすめしません。asはチェックを無効化するだけで、実行時のエラーは防げません。まずは型ガードなど、安全な方法を検討してください。</p>
<h2 style="font-size: 1.3em; margin-top: 2em; border-left: 6px solid #3178c6; padding-left: 10px;">まとめ</h2>
<ul>
<li>型アサーション（as）は、値の型を開発者側から指定する書き方</li>
<li>DOM要素の取得など、TypeScriptより開発者が型を分かっている場面で使う</li>
<li>実際の値はチェックされないため、多用すると型の安全性を失う</li>
<li>型が不確かなときは、asではなく型ガードで確認してから使うのが安全</li>
</ul>
<p>公式ドキュメントにも、型アサーションについての解説があります。</p>
<p>&#x25b6; <a href="https://www.typescriptlang.org/docs/handbook/2/everyday-types.html#type-assertions" target="_blank" rel="noopener">TypeScript公式ドキュメント：Type Assertions</a></p>
<div style="margin: 1.5em 0;"><div class="voice cf r big"><figure class="icon"><img decoding="async" src="https://kinonoteblog.com/wp-content/uploads/2020/07/pose_aseru_.png"><figcaption class="name">少年A</figcaption></figure><div class="voicecomment">
便利だけど、エラー消しに使っちゃダメってことね</div></div>
<div class="voice cf l big"><figure class="icon"><img decoding="async" src="https://kinonoteblog.com/wp-content/uploads/2019/03/nigaoemaker.png"><figcaption class="name">キノ</figcaption></figure><div class="voicecomment">
そう。asは「最後の手段」くらいの気持ちで使うのがちょうどいいよ</div></div></div>
<hr style="margin: 2.5em 0; border: none; border-top: 1px solid #ddd;" />
</article>
<p>&nbsp;</p><p>The post <a href="https://kinonoteblog.com/programming/type-assertion">TypeScriptの型アサーション（as）とは？使い方と注意点を初心者向けに解説</a> first appeared on <a href="https://kinonoteblog.com">kinoblog</a>.</p>]]></content:encoded>
					
					<wfw:commentRss>https://kinonoteblog.com/programming/type-assertion/feed</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>TypeScriptのtsxファイルとは？.tsとの違いを初心者向けに解説</title>
		<link>https://kinonoteblog.com/programming/typescript-tsx-file?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=typescript-tsx-file</link>
					<comments>https://kinonoteblog.com/programming/typescript-tsx-file#respond</comments>
		
		<dc:creator><![CDATA[kino]]></dc:creator>
		<pubDate>Tue, 11 Aug 2026 02:06:36 +0000</pubDate>
				<category><![CDATA[プログラミング]]></category>
		<category><![CDATA[TypeScript]]></category>
		<guid isPermaLink="false">https://kinonoteblog.com/?p=3343</guid>

					<description><![CDATA[<p>&#160; TypeScriptのtsxファイルとは TypeScriptのtsxファイルとは、TypeScriptの中でReactのJSX構文（HTMLのようなタグを含む書き方）を使うための拡張子です。「TypeSc...</p>
<p>The post <a href="https://kinonoteblog.com/programming/typescript-tsx-file">TypeScriptのtsxファイルとは？.tsとの違いを初心者向けに解説</a> first appeared on <a href="https://kinonoteblog.com">kinoblog</a>.</p>]]></description>
										<content:encoded><![CDATA[<p>&nbsp;</p>
<article style="font-family: 'Hiragino Sans','Yu Gothic',sans-serif; line-height: 1.8; max-width: 720px; margin: 40px auto; padding: 0 16px; color: #222;">
<h2 style="font-size: 1.3em; margin-top: 1.5em; border-left: 6px solid #3178c6; padding-left: 10px;">TypeScriptのtsxファイルとは</h2>
<p><strong>TypeScriptのtsxファイルとは、TypeScriptの中でReactのJSX構文（HTMLのようなタグを含む書き方）を使うための拡張子です。</strong>「TypeScript tsx とは何か」を一言で言えば、「TypeScript × JSX」を組み合わせたファイルという意味で、Reactの開発では欠かせない存在です。</p>
<div style="margin-bottom: 1.5em;"><div class="voice cf r big"><figure class="icon"><img decoding="async" src="https://kinonoteblog.com/wp-content/uploads/2019/08/agura_kutsurogu1_boy.png"><figcaption class="name">少年A</figcaption></figure><div class="voicecomment">
Reactのファイルって.tsのものと.tsxのものがあるけど、何が違うの？</div></div>
<div class="voice cf l big"><figure class="icon"><img decoding="async" src="https://kinonoteblog.com/wp-content/uploads/2019/03/nigaoemaker.png"><figcaption class="name">キノ</figcaption></figure><div class="voicecomment">
実はそこ、ルールを知らないと地味に詰まりやすいところだから、今日ははっきりさせておこう</div></div></div>
<h2 style="font-size: 1.3em; margin-top: 2em; border-left: 6px solid #3178c6; padding-left: 10px;">なぜ.tsと.tsxが分かれているのか</h2>
<p>TypeScriptのファイルには、大きく分けて<code style="background: #f0f0f0; color: #24292e; padding: 0.1em 0.4em; border-radius: 3px;">.ts</code>と<code style="background: #f0f0f0; color: #24292e; padding: 0.1em 0.4em; border-radius: 3px;">.tsx</code>の2種類があります。この2つが分かれている理由は、<strong>JSXを書けるかどうか</strong>です。</p>
<ul>
<li><strong>.ts</strong>：純粋なTypeScriptのコード（ロジック、関数、型定義など）を書くファイル</li>
<li><strong>.tsx</strong>：TypeScriptのコードに加えて、JSX（Reactコンポーネントの見た目部分）も書けるファイル</li>
</ul>
<p>「.tsxのxはXML（JSXのX）を表す」と覚えておくと、役割がイメージしやすくなります。</p>
<h2 style="font-size: 1.3em; margin-top: 2em; border-left: 6px solid #3178c6; padding-left: 10px;">.tsxを使う場面：JSXを書くとき</h2>
<p>Reactのコンポーネントを作るとき、関数の中に見た目（HTMLのようなタグ）を書きます。この部分がJSXです。</p>
<pre style="background: #f6f8fa; color: #24292e; padding: 1em; border-radius: 6px; overflow-x: auto; font-size: 0.9em; border: 1px solid #e1e4e8;"><code style="background: none; color: #24292e;">// Greeting.tsx
type Props = {
  name: string;
};

function Greeting({ name }: Props) {
  return &lt;h1&gt;Hello, {name}!&lt;/h1&gt;;
}

export default Greeting;</code></pre>
<p>このように、関数の中に<code style="background: #f0f0f0; color: #24292e; padding: 0.1em 0.4em; border-radius: 3px;">&lt;h1&gt;</code>のようなタグを直接書くファイルは、拡張子を<code style="background: #f0f0f0; color: #24292e; padding: 0.1em 0.4em; border-radius: 3px;">.tsx</code>にする必要があります。propsの型定義については、こちらの記事も参考にしてください。</p>
<div class="linkcard"><div class="lkc-internal-wrap"><a class="lkc-link no_icon" href="https://kinonoteblog.com/programming/typescript-array-object-types" data-lkc-id="13"><div class="lkc-card"><div class="lkc-info"><div class="lkc-favicon"><img decoding="async" src="https://www.google.com/s2/favicons?domain=kinonoteblog.com" alt="" width="16" height="16" /></div><div class="lkc-domain">kinoblog</div></div><div class="lkc-content"><figure class="lkc-thumbnail"><img decoding="async" class="lkc-thumbnail-img" src="//kinonoteblog.com/wp-content/uploads/2026/08/The-eye-should-learn-to-listen-before-it-looks.のコピーのコピーのコピーのコピーのコピー-150x150.jpg" width="100px" height="80px" alt="" /></figure><div class="lkc-title">TypeScriptの配列・オブジェクトの型定義とは？書き方を初心者向けに解説</div><div class="lkc-date">&#x1f552;&#xfe0f;2026年8月2日</div><div class="lkc-excerpt">&nbsp;配列・オブジェクトの型定義とはTypeScriptの配列・オブジェクトの型定義とは、変数の中身がどんなデータ構造になっているかをあらかじめ決めておく書き方です。実務でもっとも書く機会が多い型の一つなので、基本を押さえておくと学習効率が上がります。文字列とか数値の型は分かったけど、配列とかオブジェクトはどう書けばいいの？実はここが一番実務で使う頻度が高いところだから、今日はここだけに絞って整理してみようなぜ配列・オブジェクトにも型定義が必要なのかJavaScriptでは、配列やオブジェクトに何を入れても自由...</div></div><div class="clear"></div></div></a></div></div>
<h2 style="font-size: 1.3em; margin-top: 2em; border-left: 6px solid #3178c6; padding-left: 10px;">.tsファイルでJSXを書くとどうなるか</h2>
<p>試しに、拡張子が<code style="background: #f0f0f0; color: #24292e; padding: 0.1em 0.4em; border-radius: 3px;">.ts</code>のファイルにJSXを書いてみるとどうなるか見てみます。</p>
<pre style="background: #f6f8fa; color: #24292e; padding: 1em; border-radius: 6px; overflow-x: auto; font-size: 0.9em; border: 1px solid #e1e4e8;"><code style="background: none; color: #24292e;">// Greeting.ts
function Greeting() {
  return &lt;h1&gt;Hello!&lt;/h1&gt;;
  // Error: This expression is not callable.
  // 'JSX' refers to a UMD global, but the current file is a module.
}</code></pre>
<p>.tsファイルの中ではJSXが正しく解釈されず、コンパイルエラーになります。「JSXを含むファイルかどうか」で拡張子を分ける、というルールがここで効いてきます。</p>
<h2 style="font-size: 1.3em; margin-top: 2em; border-left: 6px solid #3178c6; padding-left: 10px;">拡張子の使い分けルール</h2>
<p>実務では、次のようなシンプルな基準で使い分けるのが一般的です。</p>
<table style="width: 100%; border-collapse: collapse; margin: 1em 0; font-size: 0.95em;">
<thead>
<tr style="background: #f6f8fa;">
<th style="border: 1px solid #e1e4e8; padding: 0.6em; text-align: left;">ファイルの内容</th>
<th style="border: 1px solid #e1e4e8; padding: 0.6em; text-align: left;">拡張子</th>
</tr>
</thead>
<tbody>
<tr>
<td style="border: 1px solid #e1e4e8; padding: 0.6em;">Reactコンポーネント（JSXあり）</td>
<td style="border: 1px solid #e1e4e8; padding: 0.6em;">.tsx</td>
</tr>
<tr>
<td style="border: 1px solid #e1e4e8; padding: 0.6em;">API通信の処理、ユーティリティ関数</td>
<td style="border: 1px solid #e1e4e8; padding: 0.6em;">.ts</td>
</tr>
<tr>
<td style="border: 1px solid #e1e4e8; padding: 0.6em;">型定義だけをまとめたファイル</td>
<td style="border: 1px solid #e1e4e8; padding: 0.6em;">.ts</td>
</tr>
</tbody>
</table>
<p>「見た目（JSX）を含むかどうか」で判断すると迷いません。API通信の関数については、こちらの記事も参考になります。</p>
<div class="linkcard"><div class="lkc-internal-wrap"><a class="lkc-link no_icon" href="https://kinonoteblog.com/programming/typescript-promise-api" data-lkc-id="11"><div class="lkc-card"><div class="lkc-info"><div class="lkc-favicon"><img decoding="async" src="https://www.google.com/s2/favicons?domain=kinonoteblog.com" alt="" width="16" height="16" /></div><div class="lkc-domain">kinoblog</div></div><div class="lkc-content"><figure class="lkc-thumbnail"><img decoding="async" class="lkc-thumbnail-img" src="//kinonoteblog.com/wp-content/uploads/2026/08/The-eye-should-learn-to-listen-before-it-looks.のコピーのコピーのコピーのコピーのコピー-2-150x150.jpg" width="100px" height="80px" alt="" /></figure><div class="lkc-title">TypeScriptのPromiseとは？API通信の型定義を初心者向けに解説</div><div class="lkc-date">&#x1f552;&#xfe0f;2026年8月1日</div><div class="lkc-excerpt">&nbsp;TypeScriptのPromise&lt;T&gt;とはTypeScriptのPromise&lt;T&gt;とは、非同期処理が最終的に返す値の型を指定する書き方です。API通信の結果に型を付けることで、レスポンスの中身をエディタの補完付きで安全に扱えるようになります。fetchでAPI叩くとき、TypeScriptだと何が変わるの？一番変わるのは「返ってきたデータの中身をちゃんと型で管理できる」ところだよこの記事では、TypeScriptでAPI通信を扱うときに必ず出てくるPromise&lt;T&gt;について、fetchを使った実例をもとに解説します。ジェネリクスの基本がまだ不安な場...</div></div><div class="clear"></div></div></a></div></div>
<h2 style="font-size: 1.3em; margin-top: 2em; border-left: 6px solid #3178c6; padding-left: 10px;">よくある勘違い：全部.tsxにすればいいわけではない</h2>
<p>「迷ったら.tsxにしておけば安全」と考えてしまいがちですが、これはあまり良い習慣ではありません。実は、.tsxファイルの中では、型アサーション（値の型を強制的に指定する書き方）の一部の書き方が使えなくなるという制約があります。JSXのタグと記法が衝突してしまうためです。</p>
<p>ロジックだけのファイルまで.tsxにしてしまうと、こうした制約を無駄に受けてしまいます。JSXを書かないファイルは、素直に.tsのままにしておくのが安全です。</p>
<h2 style="font-size: 1.3em; margin-top: 2em; border-left: 6px solid #3178c6; padding-left: 10px;">よくあるエラー</h2>
<pre style="background: #f6f8fa; color: #24292e; padding: 1em; border-radius: 6px; overflow-x: auto; font-size: 0.9em; border: 1px solid #e1e4e8;"><code style="background: none; color: #24292e;">// utils.ts の中で
export const Loading = () =&gt; &lt;p&gt;Loading...&lt;/p&gt;;
// Error: This expression is not callable.</code></pre>
<p>これは、.tsファイルの中でJSXを返す関数を書いてしまったために起きるエラーです。ファイル名の拡張子を<code style="background: #f0f0f0; color: #24292e; padding: 0.1em 0.4em; border-radius: 3px;">.tsx</code>に変更すれば解決します。逆に、JSXを含まないのにエラーが出る場合は、tsconfig.jsonの<code style="background: #f0f0f0; color: #24292e; padding: 0.1em 0.4em; border-radius: 3px;">jsx</code>オプションが正しく設定されているかを確認してみてください。</p>
<h2 style="font-size: 1.3em; margin-top: 2em; border-left: 6px solid #3178c6; padding-left: 10px;">よくある質問</h2>
<p><strong>Q. .tsxと.jsxの違いは何ですか？</strong><br />
A. どちらもJSXを書けるファイルですが、.tsxはTypeScriptの型チェックが効き、.jsxは通常のJavaScriptとして扱われます。</p>
<p><strong>Q. すべてのファイルを.tsxにしても問題ないですか？</strong><br />
A. 動作はしますが、JSXを含まないファイルを.tsxにすると、型アサーションの一部の書き方が使えなくなるなどの制約を受けます。JSXを書かないファイルは.tsのままにしておくのがおすすめです。</p>
<p><strong>Q. .ts→.tsxへの変更で他に注意点はありますか？</strong><br />
A. 拡張子を変更するだけで基本的には動作します。import文でファイルを参照している箇所も、拡張子を省略していれば通常は修正不要です。</p>
<h2 style="font-size: 1.3em; margin-top: 2em; border-left: 6px solid #3178c6; padding-left: 10px;">まとめ：TypeScript tsx とは何かのおさらい</h2>
<ul>
<li>.tsxはTypeScriptの中でJSXを書くための拡張子</li>
<li>Reactコンポーネント（見た目を含む部分）は.tsx、ロジックだけのファイルは.tsに分ける</li>
<li>JSXを含まないファイルまで.tsxにすると、型アサーションなどで余計な制約を受けることがある</li>
</ul>
<p>公式ドキュメントにも、JSXの扱いについての詳しい解説があります。</p>
<p>&#x25b6; <a href="https://www.typescriptlang.org/docs/handbook/jsx.html" target="_blank" rel="noopener">TypeScript公式ドキュメント：JSX</a><br />
&#x25b6; <a href="https://react.dev/learn/writing-markup-with-jsx" target="_blank" rel="noopener">React公式ドキュメント：Writing Markup with JSX</a></p>
<div style="margin: 1.5em 0;"><div class="voice cf r big"><figure class="icon"><img decoding="async" src="https://kinonoteblog.com/wp-content/uploads/2020/07/pose_aseru_.png"><figcaption class="name">少年A</figcaption></figure><div class="voicecomment">
JSXがあるかないかで決めればいいだけなんだね、意外とシンプル</div></div>
<div class="voice cf l big"><figure class="icon"><img decoding="async" src="https://kinonoteblog.com/wp-content/uploads/2019/03/nigaoemaker.png"><figcaption class="name">キノ</figcaption></figure><div class="voicecomment">
うん。ちなみに.tsxファイルだと使えない型アサーションの書き方もあって、それはまた次回にまとめるね</div></div></div>
<hr style="margin: 2.5em 0; border: none; border-top: 1px solid #ddd;" />
</article>
<p>&nbsp;</p><p>The post <a href="https://kinonoteblog.com/programming/typescript-tsx-file">TypeScriptのtsxファイルとは？.tsとの違いを初心者向けに解説</a> first appeared on <a href="https://kinonoteblog.com">kinoblog</a>.</p>]]></content:encoded>
					
					<wfw:commentRss>https://kinonoteblog.com/programming/typescript-tsx-file/feed</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>tsconfig.jsonとは？初期設定の作り方を初心者向けに解説</title>
		<link>https://kinonoteblog.com/programming/typescript-tsconfig-beginner?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=typescript-tsconfig-beginner</link>
					<comments>https://kinonoteblog.com/programming/typescript-tsconfig-beginner#respond</comments>
		
		<dc:creator><![CDATA[kino]]></dc:creator>
		<pubDate>Sun, 09 Aug 2026 05:20:30 +0000</pubDate>
				<category><![CDATA[プログラミング]]></category>
		<category><![CDATA[TypeScript]]></category>
		<guid isPermaLink="false">https://kinonoteblog.com/?p=3329</guid>

					<description><![CDATA[<p>&#160; tsconfig.jsonとは tsconfig.jsonとは、TypeScriptのコンパイル方法をプロジェクト単位でまとめて設定するファイルです。このファイルを用意しておくことで、ファイルごとにコマンド...</p>
<p>The post <a href="https://kinonoteblog.com/programming/typescript-tsconfig-beginner">tsconfig.jsonとは？初期設定の作り方を初心者向けに解説</a> first appeared on <a href="https://kinonoteblog.com">kinoblog</a>.</p>]]></description>
										<content:encoded><![CDATA[<p>&nbsp;</p>
<article style="font-family: 'Hiragino Sans','Yu Gothic',sans-serif; line-height: 1.8; max-width: 720px; margin: 40px auto; padding: 0 16px; color: #222;">
<h2 style="font-size: 1.3em; margin-top: 1.5em; border-left: 6px solid #3178c6; padding-left: 10px;">tsconfig.jsonとは</h2>
<p><strong>tsconfig.jsonとは、TypeScriptのコンパイル方法をプロジェクト単位でまとめて設定するファイルです。</strong>このファイルを用意しておくことで、ファイルごとにコマンドのオプションを指定する手間がなくなります。</p>
<div style="margin-bottom: 1.5em;"><div class="voice cf r big"><figure class="icon"><img decoding="async" src="https://kinonoteblog.com/wp-content/uploads/2020/07/pose_aseru_.png"><figcaption class="name">少年A</figcaption></figure><div class="voicecomment">
前回tscコマンドでコンパイルできたけど、tsconfig.jsonってファイルもよく見かけるんだけど何なの？</div></div>
<div class="voice cf l big"><figure class="icon"><img decoding="async" src="https://kinonoteblog.com/wp-content/uploads/2019/03/nigaoemaker.png"><figcaption class="name">キノ</figcaption></figure><div class="voicecomment">
それ、プロジェクトの設定をまとめておくファイルなんだ。前回の続きとして、今日はこれを整理してみよう</div></div></div>
<p>まだTypeScriptの環境構築が済んでいない場合は、先にこちらの記事を読んでおくとスムーズです。</p>
<div class="linkcard"><div class="lkc-internal-wrap"><a class="lkc-link no_icon" href="https://kinonoteblog.com/programming/typescript-setup-beginner" data-lkc-id="15"><div class="lkc-card"><div class="lkc-info"><div class="lkc-favicon"><img decoding="async" src="https://www.google.com/s2/favicons?domain=kinonoteblog.com" alt="" width="16" height="16" /></div><div class="lkc-domain">kinoblog</div></div><div class="lkc-content"><figure class="lkc-thumbnail"><img decoding="async" class="lkc-thumbnail-img" src="//kinonoteblog.com/wp-content/uploads/2026/08/The-eye-should-learn-to-listen-before-it-looks.のコピーのコピーのコピーのコピーのコピー-2-150x150.webp" width="100px" height="80px" alt="" /></figure><div class="lkc-title">TypeScriptの始め方とは？インストールからコンパイルまで初心者向けに解説</div><div class="lkc-date">&#x1f552;&#xfe0f;2026年8月4日</div><div class="lkc-excerpt">&nbsp;TypeScriptの始め方とはTypeScriptの始め方とは、Node.jsを準備し、TypeScript本体をインストールして、書いたコード（.tsファイル）をブラウザやNode.jsで動かせる形（.jsファイル）に変換する一連の流れです。この記事では、その手順を一つずつ確認していきます。型の書き方は分かってきたけど、そもそもTypeScriptってどうやって動かすの？たしかに、そこ意外と説明されないよね。今日は環境構築から一緒に見ていこうTypeScriptを使うために必要なものTypeScriptを使うには、まず「Node.js」というソフトが必要です。TypeScri...</div></div><div class="clear"></div></div></a></div></div>
<h2 style="font-size: 1.3em; margin-top: 2em; border-left: 6px solid #3178c6; padding-left: 10px;">なぜtsconfig.jsonが必要なのか</h2>
<p>前回、1つのファイルをコンパイルする方法を紹介しました。</p>
<pre style="background: #f6f8fa; color: #24292e; padding: 1em; border-radius: 6px; overflow-x: auto; font-size: 0.9em; border: 1px solid #e1e4e8;"><code style="background: none; color: #24292e;">tsc index.ts</code></pre>
<p>しかし実際の開発では、ファイルが1つだけということはほとんどありません。複数のファイルをまとめてコンパイルしたい場合や、細かい設定（型チェックの厳しさ、出力先フォルダなど）を毎回コマンドに書くのは現実的ではありません。tsconfig.jsonに設定をまとめておけば、<code style="background: #f0f0f0; color: #24292e; padding: 0.1em 0.4em; border-radius: 3px;">tsc</code>とだけ打つだけで、その設定に沿ってコンパイルしてくれるようになります。</p>
<h2 style="font-size: 1.3em; margin-top: 2em; border-left: 6px solid #3178c6; padding-left: 10px;">tsc &#8211;initで作成する方法</h2>
<p>tsconfig.jsonは手書きで作ることもできますが、コマンドで自動生成するのが簡単です。プロジェクトのフォルダで以下を実行します。</p>
<pre style="background: #f6f8fa; color: #24292e; padding: 1em; border-radius: 6px; overflow-x: auto; font-size: 0.9em; border: 1px solid #e1e4e8;"><code style="background: none; color: #24292e;">tsc --init</code></pre>
<p>実行すると、コメント付きのtsconfig.jsonが生成されます。設定項目が大量に並んでいて最初は圧倒されますが、初心者のうちに触る項目はごく一部です。</p>
<h2 style="font-size: 1.3em; margin-top: 2em; border-left: 6px solid #3178c6; padding-left: 10px;">最低限おさえておきたい設定項目</h2>
<p>数ある設定の中でも、まずは次の4つを押さえておけば十分です。</p>
<pre style="background: #f6f8fa; color: #24292e; padding: 1em; border-radius: 6px; overflow-x: auto; font-size: 0.9em; border: 1px solid #e1e4e8;"><code style="background: none; color: #24292e;">{
  "compilerOptions": {
    "target": "ES2020",
    "outDir": "./dist",
    "rootDir": "./src",
    "strict": true
  }
}</code></pre>
<h2 style="font-size: 1.3em; margin-top: 2em; border-left: 6px solid #3178c6; padding-left: 10px;">targetとは：変換後のJavaScriptのバージョン</h2>
<p><code style="background: #f0f0f0; color: #24292e; padding: 0.1em 0.4em; border-radius: 3px;">target</code>は、コンパイル後にどのバージョンのJavaScriptとして出力するかを指定します。古いブラウザにも対応させたい場合は古めのバージョンを、モダンな環境だけを想定するなら新しめのバージョンを指定します。迷ったら、まずはある程度新しいバージョン（ES2020前後）を指定しておけば問題ありません。</p>
<h2 style="font-size: 1.3em; margin-top: 2em; border-left: 6px solid #3178c6; padding-left: 10px;">outDir・rootDirでファイルを整理する</h2>
<p>この2つは、ファイルの置き場所を整理するための設定です。</p>
<ul>
<li><strong>rootDir</strong>：自分が書く.tsファイルを置くフォルダ（例：src）</li>
<li><strong>outDir</strong>：コンパイル後の.jsファイルが出力されるフォルダ（例：dist）</li>
</ul>
<p>これを設定しておくと、書いたコードと変換後のコードが別フォルダに分かれるため、プロジェクトの中身が整理しやすくなります。設定後は、<code style="background: #f0f0f0; color: #24292e; padding: 0.1em 0.4em; border-radius: 3px;">tsc</code>とだけ打てば、srcフォルダの中身がまとめてコンパイルされ、distフォルダに出力されます。</p>
<pre style="background: #f6f8fa; color: #24292e; padding: 1em; border-radius: 6px; overflow-x: auto; font-size: 0.9em; border: 1px solid #e1e4e8;"><code style="background: none; color: #24292e;">tsc</code></pre>
<h2 style="font-size: 1.3em; margin-top: 2em; border-left: 6px solid #3178c6; padding-left: 10px;">strictとは：型チェックの厳しさ</h2>
<p><code style="background: #f0f0f0; color: #24292e; padding: 0.1em 0.4em; border-radius: 3px;">strict</code>は、型チェックをどれだけ厳しくするかを一括で決める設定です。詳しくはこちらの記事でも紹介していますが、実務のプロジェクトはオンが前提になっていることが多いため、学習中からオンにしておくのがおすすめです。</p>
<div class="linkcard"><div class="lkc-internal-wrap"><a class="lkc-link no_icon" href="https://kinonoteblog.com/programming/typescript-beginner-essentials" data-lkc-id="4"><div class="lkc-card"><div class="lkc-info"><div class="lkc-favicon"><img decoding="async" src="https://www.google.com/s2/favicons?domain=kinonoteblog.com" alt="" width="16" height="16" /></div><div class="lkc-domain">kinoblog</div></div><div class="lkc-content"><figure class="lkc-thumbnail"><img decoding="async" class="lkc-thumbnail-img" src="//kinonoteblog.com/wp-content/uploads/2026/07/The-eye-should-learn-to-listen-before-it-looks.のコピーのコピーのコピーのコピーのコピー-150x150.jpg" width="100px" height="80px" alt="" /></figure><div class="lkc-title">TypeScript初心者がここだけ押さえておけばいい6つのポイント【公式ドキュメント付...</div><div class="lkc-date">&#x1f552;&#xfe0f;2026年7月30日</div><div class="lkc-excerpt">&nbsp;TypeScriptって覚えること多すぎない？結局何が分かってればいいの？正直、最初は全部理解しなくていいと思う。ここ数回で自分がつまずいたポイントを整理してみた全部を完璧に理解しようとしなくていいこれまで何回かに分けて、TypeScriptを学び始めて実際につまずいたポイントを書いてきました。振り返ってみると、公式ドキュメントを最初から全部読もうとして挫折しかけたのですが、実務で最低限困らないレベルまでは、意外と少ない知識でたどり着けると感じています。まずは前提として、JavaScriptとの違いをまだ整理できて...</div></div><div class="clear"></div></div></a></div></div>
<h2 style="font-size: 1.3em; margin-top: 2em; border-left: 6px solid #3178c6; padding-left: 10px;">tsconfig.jsonがあると何が変わるか</h2>
<p>tsconfig.jsonを作る前と後で、コンパイルの手間が大きく変わります。</p>
<table style="width: 100%; border-collapse: collapse; margin: 1em 0; font-size: 0.95em;">
<thead>
<tr style="background: #f6f8fa;">
<th style="border: 1px solid #e1e4e8; padding: 0.6em; text-align: left;">状態</th>
<th style="border: 1px solid #e1e4e8; padding: 0.6em; text-align: left;">コンパイル方法</th>
</tr>
</thead>
<tbody>
<tr>
<td style="border: 1px solid #e1e4e8; padding: 0.6em;">tsconfig.jsonなし</td>
<td style="border: 1px solid #e1e4e8; padding: 0.6em;">ファイルごとに<code>tsc index.ts</code>のように指定</td>
</tr>
<tr>
<td style="border: 1px solid #e1e4e8; padding: 0.6em;">tsconfig.jsonあり</td>
<td style="border: 1px solid #e1e4e8; padding: 0.6em;"><code>tsc</code>だけで、設定に沿ってプロジェクト全体をコンパイル</td>
</tr>
</tbody>
</table>
<h2 style="font-size: 1.3em; margin-top: 2em; border-left: 6px solid #3178c6; padding-left: 10px;">よくあるエラー</h2>
<pre style="background: #f6f8fa; color: #24292e; padding: 1em; border-radius: 6px; overflow-x: auto; font-size: 0.9em; border: 1px solid #e1e4e8;"><code style="background: none; color: #24292e;">tsc --init
// error TS5055: Cannot write file '...' because it would overwrite input file.</code></pre>
<p>これは、outDirとrootDirの設定が正しくなく、出力先と入力元が重なってしまっているときに起きるエラーです。<code style="background: #f0f0f0; color: #24292e; padding: 0.1em 0.4em; border-radius: 3px;">rootDir</code>と<code style="background: #f0f0f0; color: #24292e; padding: 0.1em 0.4em; border-radius: 3px;">outDir</code>に、それぞれ別のフォルダ名を指定できているか確認してみてください。</p>
<h2 style="font-size: 1.3em; margin-top: 2em; border-left: 6px solid #3178c6; padding-left: 10px;">よくある質問</h2>
<p><strong>Q. tsconfig.jsonは必ず作らないといけませんか？</strong><br />
A. 1ファイルだけの学習用コードなら無くても動きますが、複数ファイルを扱うプロジェクトでは基本的に作成します。</p>
<p><strong>Q. tsc &#8211;initで生成された設定は、そのまま使ってもいいですか？</strong><br />
A. 動作はしますが、outDir・rootDir・strictあたりは、プロジェクトに合わせて自分で見直すのがおすすめです。</p>
<p><strong>Q. targetは何を選べばいいですか？</strong><br />
A. 特別な事情がなければ、比較的新しいバージョン（ES2020前後）を選んでおけば、学習段階では困りません。</p>
<h2 style="font-size: 1.3em; margin-top: 2em; border-left: 6px solid #3178c6; padding-left: 10px;">まとめ</h2>
<ul>
<li>tsconfig.jsonは、コンパイルの設定をプロジェクト単位でまとめるファイル</li>
<li><code style="background: #f0f0f0; color: #24292e; padding: 0.1em 0.4em; border-radius: 3px;">tsc --init</code>で自動生成できる</li>
<li>最初は<code style="background: #f0f0f0; color: #24292e; padding: 0.1em 0.4em; border-radius: 3px;">target</code>・<code style="background: #f0f0f0; color: #24292e; padding: 0.1em 0.4em; border-radius: 3px;">outDir</code>・<code style="background: #f0f0f0; color: #24292e; padding: 0.1em 0.4em; border-radius: 3px;">rootDir</code>・<code style="background: #f0f0f0; color: #24292e; padding: 0.1em 0.4em; border-radius: 3px;">strict</code>の4つを押さえれば十分</li>
<li>設定しておけば、<code style="background: #f0f0f0; color: #24292e; padding: 0.1em 0.4em; border-radius: 3px;">tsc</code>と打つだけでプロジェクト全体をコンパイルできる</li>
</ul>
<p>公式ドキュメントにも、設定項目の一覧がまとまっています。</p>
<p>&#x25b6; <a href="https://www.typescriptlang.org/tsconfig" target="_blank" rel="noopener">TypeScript公式ドキュメント：tsconfig Reference</a></p>
<div style="margin: 1.5em 0;"><div class="voice cf r big"><figure class="icon"><img decoding="async" src="https://kinonoteblog.com/wp-content/uploads/2019/08/agura_kutsurogu1_boy.png"><figcaption class="name">少年A</figcaption></figure><div class="voicecomment">
毎回tsc index.tsって打たなくてよくなるの、地味に嬉しい</div></div>
<div class="voice cf l big"><figure class="icon"><img decoding="async" src="https://kinonoteblog.com/wp-content/uploads/2019/03/nigaoemaker.png"><figcaption class="name">キノ</figcaption></figure><div class="voicecomment">
うん。最初に整えておくと、後がずっと楽になるところだから、早めに慣れておいて損はないよ</div></div></div>
<hr style="margin: 2.5em 0; border: none; border-top: 1px solid #ddd;" />
<p style="font-size: 0.9em; color: #555;">
</article>
<p>&nbsp;</p><p>The post <a href="https://kinonoteblog.com/programming/typescript-tsconfig-beginner">tsconfig.jsonとは？初期設定の作り方を初心者向けに解説</a> first appeared on <a href="https://kinonoteblog.com">kinoblog</a>.</p>]]></content:encoded>
					
					<wfw:commentRss>https://kinonoteblog.com/programming/typescript-tsconfig-beginner/feed</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>TypeScriptの始め方とは？インストールからコンパイルまで初心者向けに解説</title>
		<link>https://kinonoteblog.com/programming/typescript-setup-beginner?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=typescript-setup-beginner</link>
					<comments>https://kinonoteblog.com/programming/typescript-setup-beginner#respond</comments>
		
		<dc:creator><![CDATA[kino]]></dc:creator>
		<pubDate>Tue, 04 Aug 2026 11:50:41 +0000</pubDate>
				<category><![CDATA[プログラミング]]></category>
		<category><![CDATA[TypeScript]]></category>
		<guid isPermaLink="false">https://kinonoteblog.com/?p=3321</guid>

					<description><![CDATA[<p>&#160; TypeScriptの始め方とは TypeScriptの始め方とは、Node.jsを準備し、TypeScript本体をインストールして、書いたコード（.tsファイル）をブラウザやNode.jsで動かせる形（...</p>
<p>The post <a href="https://kinonoteblog.com/programming/typescript-setup-beginner">TypeScriptの始め方とは？インストールからコンパイルまで初心者向けに解説</a> first appeared on <a href="https://kinonoteblog.com">kinoblog</a>.</p>]]></description>
										<content:encoded><![CDATA[<p>&nbsp;</p>
<article style="font-family: 'Hiragino Sans','Yu Gothic',sans-serif; line-height: 1.8; max-width: 720px; margin: 40px auto; padding: 0 16px; color: #222;">
<h2 style="font-size: 1.3em; margin-top: 1.5em; border-left: 6px solid #3178c6; padding-left: 10px;">TypeScriptの始め方とは</h2>
<p><strong>TypeScriptの始め方とは、Node.jsを準備し、TypeScript本体をインストールして、書いたコード（.tsファイル）をブラウザやNode.jsで動かせる形（.jsファイル）に変換する一連の流れです。</strong>この記事では、その手順を一つずつ確認していきます。</p>
<div style="margin-bottom: 1.5em;"><div class="voice cf r big"><figure class="icon"><img decoding="async" src="https://kinonoteblog.com/wp-content/uploads/2019/06/nayamu_boy2.png"><figcaption class="name">少年A</figcaption></figure><div class="voicecomment">
型の書き方は分かってきたけど、そもそもTypeScriptってどうやって動かすの？</div></div>
<div class="voice cf l big"><figure class="icon"><img decoding="async" src="https://kinonoteblog.com/wp-content/uploads/2019/03/nigaoemaker.png"><figcaption class="name">キノ</figcaption></figure><div class="voicecomment">
たしかに、そこ意外と説明されないよね。今日は環境構築から一緒に見ていこう</div></div></div>
<h2 style="font-size: 1.3em; margin-top: 2em; border-left: 6px solid #3178c6; padding-left: 10px;">TypeScriptを使うために必要なもの</h2>
<p>TypeScriptを使うには、まず「Node.js」というソフトが必要です。TypeScriptのインストールや実行に使う「npm」というツールが、Node.jsに含まれているためです。</p>
<p>&#x25b6; <a href="https://nodejs.org/ja" target="_blank" rel="noopener">Node.js公式サイト</a></p>
<p>公式サイトからインストーラーをダウンロードし、案内に沿って進めればインストールできます。ターミナル（Macはターミナル、Windowsはコマンドプロンプトなど）で以下のコマンドを打ち、バージョンが表示されればインストール完了です。</p>
<pre style="background: #f6f8fa; color: #24292e; padding: 1em; border-radius: 6px; overflow-x: auto; font-size: 0.9em; border: 1px solid #e1e4e8;"><code style="background: none; color: #24292e;">node -v
npm -v</code></pre>
<h2 style="font-size: 1.3em; margin-top: 2em; border-left: 6px solid #3178c6; padding-left: 10px;">TypeScriptのインストール方法</h2>
<p>Node.jsの準備ができたら、npmを使ってTypeScript本体をインストールします。</p>
<pre style="background: #f6f8fa; color: #24292e; padding: 1em; border-radius: 6px; overflow-x: auto; font-size: 0.9em; border: 1px solid #e1e4e8;"><code style="background: none; color: #24292e;">npm install -g typescript</code></pre>
<p><code style="background: #f0f0f0; color: #24292e; padding: 0.1em 0.4em; border-radius: 3px;">-g</code>は「グローバルにインストールする」という意味で、パソコン上のどのフォルダからでもTypeScriptのコマンドを使えるようにする設定です。インストールできたか確認するには、以下を実行します。</p>
<pre style="background: #f6f8fa; color: #24292e; padding: 1em; border-radius: 6px; overflow-x: auto; font-size: 0.9em; border: 1px solid #e1e4e8;"><code style="background: none; color: #24292e;">tsc -v</code></pre>
<p>バージョンが表示されれば成功です。<code style="background: #f0f0f0; color: #24292e; padding: 0.1em 0.4em; border-radius: 3px;">tsc</code>は「TypeScript Compiler」の略で、これから何度も使うコマンドになります。</p>
<h2 style="font-size: 1.3em; margin-top: 2em; border-left: 6px solid #3178c6; padding-left: 10px;">.tsファイルの作り方</h2>
<p>適当な作業用フォルダを作り、その中に拡張子が<code style="background: #f0f0f0; color: #24292e; padding: 0.1em 0.4em; border-radius: 3px;">.ts</code>のファイルを作成します。試しに、以下の内容で<code style="background: #f0f0f0; color: #24292e; padding: 0.1em 0.4em; border-radius: 3px;">index.ts</code>というファイルを作ってみましょう。</p>
<pre style="background: #f6f8fa; color: #24292e; padding: 1em; border-radius: 6px; overflow-x: auto; font-size: 0.9em; border: 1px solid #e1e4e8;"><code style="background: none; color: #24292e;">const message: string = "Hello, TypeScript!";
console.log(message);</code></pre>
<p>これまで紹介してきた型注釈の書き方は、こちらの記事も参考にしてください。</p>
<div class="linkcard"><div class="lkc-internal-wrap"><a class="lkc-link no_icon" href="https://kinonoteblog.com/programming/typescript-type-annotation-basics" data-lkc-id="14"><div class="lkc-card"><div class="lkc-info"><div class="lkc-favicon"><img decoding="async" src="https://www.google.com/s2/favicons?domain=kinonoteblog.com" alt="" width="16" height="16" /></div><div class="lkc-domain">kinoblog</div></div><div class="lkc-content"><figure class="lkc-thumbnail"><img decoding="async" class="lkc-thumbnail-img" src="//kinonoteblog.com/wp-content/uploads/2026/08/The-eye-should-learn-to-listen-before-it-looks.のコピーのコピーのコピーのコピーのコピー-1-1-150x150.jpg" width="100px" height="80px" alt="" /></figure><div class="lkc-title">TypeScriptの変数・関数の型注釈とは？書き方を初心者向けに解説</div><div class="lkc-date">&#x1f552;&#xfe0f;2026年8月3日</div><div class="lkc-excerpt">&nbsp;TypeScriptの型注釈とはTypeScriptの型注釈とは、変数や関数に対して「どんな型の値を扱うか」を明示する書き方です。変数の後ろや関数の引数・戻り値に: 型名という形で記述します。コロンの後ろに型を書くってやつ、なんとなく真似して書いてるけど、ちゃんと理解できてないかも実はここ、応用が少なくて一番「型に慣れる」のに向いてる場所だから、今日はここだけ丁寧にやろうなぜ型注釈が必要なのかJavaScriptでは、変数にどんな値でも自由に代入できます。// JavaScriptlet price = 1000;price = &quot;1000円&quot;; // 数...</div></div><div class="clear"></div></div></a></div></div>
<h2 style="font-size: 1.3em; margin-top: 2em; border-left: 6px solid #3178c6; padding-left: 10px;">コンパイルとは何か</h2>
<p>ブラウザやNode.jsは、実は.tsファイルをそのまま実行できません。<code style="background: #f0f0f0; color: #24292e; padding: 0.1em 0.4em; border-radius: 3px;">.ts</code>ファイルを、実行可能な<code style="background: #f0f0f0; color: #24292e; padding: 0.1em 0.4em; border-radius: 3px;">.js</code>ファイルに変換する作業を「コンパイル」と呼びます。ターミナルで、先ほど作ったファイルに対して次のコマンドを実行します。</p>
<pre style="background: #f6f8fa; color: #24292e; padding: 1em; border-radius: 6px; overflow-x: auto; font-size: 0.9em; border: 1px solid #e1e4e8;"><code style="background: none; color: #24292e;">tsc index.ts</code></pre>
<p>同じフォルダの中に<code style="background: #f0f0f0; color: #24292e; padding: 0.1em 0.4em; border-radius: 3px;">index.js</code>という新しいファイルが生成されていれば成功です。中身を開いてみると、型注釈が取り除かれた、普通のJavaScriptのコードになっているのが分かります。</p>
<h2 style="font-size: 1.3em; margin-top: 2em; border-left: 6px solid #3178c6; padding-left: 10px;">コンパイルした.jsファイルを実行する</h2>
<p>生成された<code style="background: #f0f0f0; color: #24292e; padding: 0.1em 0.4em; border-radius: 3px;">.js</code>ファイルは、Node.jsで実行できます。</p>
<pre style="background: #f6f8fa; color: #24292e; padding: 1em; border-radius: 6px; overflow-x: auto; font-size: 0.9em; border: 1px solid #e1e4e8;"><code style="background: none; color: #24292e;">node index.js
// Hello, TypeScript!</code></pre>
<p>「.tsファイルを書く → コンパイルする → .jsファイルを実行する」という3ステップが、TypeScriptを動かす基本の流れです。</p>
<h2 style="font-size: 1.3em; margin-top: 2em; border-left: 6px solid #3178c6; padding-left: 10px;">毎回コンパイルするのが面倒なときの対処法</h2>
<p>コードを直すたびに手動で<code style="background: #f0f0f0; color: #24292e; padding: 0.1em 0.4em; border-radius: 3px;">tsc</code>コマンドを打つのは手間です。<code style="background: #f0f0f0; color: #24292e; padding: 0.1em 0.4em; border-radius: 3px;">--watch</code>オプションを付けると、ファイルを保存するたびに自動でコンパイルしてくれます。</p>
<pre style="background: #f6f8fa; color: #24292e; padding: 1em; border-radius: 6px; overflow-x: auto; font-size: 0.9em; border: 1px solid #e1e4e8;"><code style="background: none; color: #24292e;">tsc index.ts --watch</code></pre>
<p>実務ではさらに、コンパイルと実行を1コマンドでまとめて行う<code style="background: #f0f0f0; color: #24292e; padding: 0.1em 0.4em; border-radius: 3px;">ts-node</code>というツールもよく使われます。学習初期は、まず<code style="background: #f0f0f0; color: #24292e; padding: 0.1em 0.4em; border-radius: 3px;">tsc</code>コマンドの流れを理解しておくのが優先です。</p>
<h2 style="font-size: 1.3em; margin-top: 2em; border-left: 6px solid #3178c6; padding-left: 10px;">よくあるエラー</h2>
<pre style="background: #f6f8fa; color: #24292e; padding: 1em; border-radius: 6px; overflow-x: auto; font-size: 0.9em; border: 1px solid #e1e4e8;"><code style="background: none; color: #24292e;">tsc index.ts
// 'tsc' is not recognized as an internal or external command
// または
// command not found: tsc</code></pre>
<p>これは、TypeScriptがインストールされていない、もしくは正しくインストールされていないときに出るエラーです。<code style="background: #f0f0f0; color: #24292e; padding: 0.1em 0.4em; border-radius: 3px;">npm install -g typescript</code>を再度実行し、インストールされているか確認してみてください。</p>
<h2 style="font-size: 1.3em; margin-top: 2em; border-left: 6px solid #3178c6; padding-left: 10px;">よくある質問</h2>
<p><strong>Q. TypeScriptを使うのにNode.jsは必須ですか？</strong><br />
A. TypeScript本体のインストールや、tscコマンドの実行にnpm（Node.jsに含まれるツール）が必要なため、事実上必須です。</p>
<p><strong>Q. .tsファイルはブラウザでそのまま動きますか？</strong><br />
A. 動きません。コンパイルして.jsファイルに変換してから、ブラウザやNode.jsで実行します。</p>
<p><strong>Q. tscコマンドを毎回打つのは面倒です。何か方法はありますか？</strong><br />
A. <code style="background: #f0f0f0; color: #24292e; padding: 0.1em 0.4em; border-radius: 3px;">--watch</code>オプションを使うと、保存するたびに自動でコンパイルされます。</p>
<h2 style="font-size: 1.3em; margin-top: 2em; border-left: 6px solid #3178c6; padding-left: 10px;">まとめ</h2>
<ul>
<li>TypeScriptを使うには、まずNode.jsが必要</li>
<li><code style="background: #f0f0f0; color: #24292e; padding: 0.1em 0.4em; border-radius: 3px;">npm install -g typescript</code>でTypeScript本体をインストールする</li>
<li>.tsファイルは、<code style="background: #f0f0f0; color: #24292e; padding: 0.1em 0.4em; border-radius: 3px;">tsc</code>コマンドでコンパイルしてから実行する</li>
<li><code style="background: #f0f0f0; color: #24292e; padding: 0.1em 0.4em; border-radius: 3px;">--watch</code>オプションを使うと、保存のたびに自動でコンパイルできる</li>
</ul>
<p>公式ドキュメントにも、環境構築の手順がまとまっています。</p>
<p>&#x25b6; <a href="https://www.typescriptlang.org/download" target="_blank" rel="noopener">TypeScript公式ドキュメント：Download / Installation</a></p>
<div style="margin: 1.5em 0;"><div class="voice cf r big"><figure class="icon"><img decoding="async" src="https://kinonoteblog.com/wp-content/uploads/2019/08/agura_kutsurogu1_boy.png"><figcaption class="name">少年A</figcaption></figure><div class="voicecomment">
書く・変換する・実行する、この3つの流れがやっと繋がった気がする</div></div>
<div class="voice cf l big"><figure class="icon"><img decoding="async" src="https://kinonoteblog.com/wp-content/uploads/2019/03/nigaoemaker.png"><figcaption class="name">キノ</figcaption></figure><div class="voicecomment">
うん。ここが分かると、これまで書いてきた型注釈の意味もイメージしやすくなるはずだよ</div></div></div>
<hr style="margin: 2.5em 0; border: none; border-top: 1px solid #ddd;" />
</article>
<p>&nbsp;</p><p>The post <a href="https://kinonoteblog.com/programming/typescript-setup-beginner">TypeScriptの始め方とは？インストールからコンパイルまで初心者向けに解説</a> first appeared on <a href="https://kinonoteblog.com">kinoblog</a>.</p>]]></content:encoded>
					
					<wfw:commentRss>https://kinonoteblog.com/programming/typescript-setup-beginner/feed</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>TypeScriptの変数・関数の型注釈とは？書き方を初心者向けに解説</title>
		<link>https://kinonoteblog.com/programming/typescript-type-annotation-basics?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=typescript-type-annotation-basics</link>
					<comments>https://kinonoteblog.com/programming/typescript-type-annotation-basics#respond</comments>
		
		<dc:creator><![CDATA[kino]]></dc:creator>
		<pubDate>Mon, 03 Aug 2026 11:46:21 +0000</pubDate>
				<category><![CDATA[プログラミング]]></category>
		<category><![CDATA[TypeScript]]></category>
		<guid isPermaLink="false">https://kinonoteblog.com/?p=3316</guid>

					<description><![CDATA[<p>&#160; TypeScriptの型注釈とは TypeScriptの型注釈とは、変数や関数に対して「どんな型の値を扱うか」を明示する書き方です。変数の後ろや関数の引数・戻り値に: 型名という形で記述します。 なぜ型注釈...</p>
<p>The post <a href="https://kinonoteblog.com/programming/typescript-type-annotation-basics">TypeScriptの変数・関数の型注釈とは？書き方を初心者向けに解説</a> first appeared on <a href="https://kinonoteblog.com">kinoblog</a>.</p>]]></description>
										<content:encoded><![CDATA[<p>&nbsp;</p>
<article style="font-family: 'Hiragino Sans','Yu Gothic',sans-serif; line-height: 1.8; max-width: 720px; margin: 40px auto; padding: 0 16px; color: #222;">
<h2 style="font-size: 1.3em; margin-top: 1.5em; border-left: 6px solid #3178c6; padding-left: 10px;">TypeScriptの型注釈とは</h2>
<p><strong>TypeScriptの型注釈とは、変数や関数に対して「どんな型の値を扱うか」を明示する書き方です。</strong>変数の後ろや関数の引数・戻り値に<code style="background: #f0f0f0; color: #24292e; padding: 0.1em 0.4em; border-radius: 3px;">: 型名</code>という形で記述します。</p>
<div style="margin-bottom: 1.5em;"><div class="voice cf r big"><figure class="icon"><img decoding="async" src="https://kinonoteblog.com/wp-content/uploads/2020/07/pose_aseru_.png"><figcaption class="name">少年A</figcaption></figure><div class="voicecomment">
コロンの後ろに型を書くってやつ、なんとなく真似して書いてるけど、ちゃんと理解できてないかも</div></div>
<div class="voice cf l big"><figure class="icon"><img decoding="async" src="https://kinonoteblog.com/wp-content/uploads/2019/03/nigaoemaker.png"><figcaption class="name">キノ</figcaption></figure><div class="voicecomment">
実はここ、応用が少なくて一番「型に慣れる」のに向いてる場所だから、今日はここだけ丁寧にやろう</div></div></div>
<h2 style="font-size: 1.3em; margin-top: 2em; border-left: 6px solid #3178c6; padding-left: 10px;">なぜ型注釈が必要なのか</h2>
<p>JavaScriptでは、変数にどんな値でも自由に代入できます。</p>
<pre style="background: #f6f8fa; color: #24292e; padding: 1em; border-radius: 6px; overflow-x: auto; font-size: 0.9em; border: 1px solid #e1e4e8;"><code style="background: none; color: #24292e;">// JavaScript
let price = 1000;
price = "1000円"; // 数値のつもりが文字列に変わっても、実行するまで気づけない</code></pre>
<p>型注釈を付けておけば、こうした意図しない変化をコードを書いている段階で検知できます。特に関数は複数の場所から呼び出されることが多いため、引数や戻り値の型を明示しておくメリットが大きくなります。</p>
<h2 style="font-size: 1.3em; margin-top: 2em; border-left: 6px solid #3178c6; padding-left: 10px;">変数の型注釈の書き方</h2>
<p>変数名の後ろに<code style="background: #f0f0f0; color: #24292e; padding: 0.1em 0.4em; border-radius: 3px;">: 型名</code>を書きます。</p>
<pre style="background: #f6f8fa; color: #24292e; padding: 1em; border-radius: 6px; overflow-x: auto; font-size: 0.9em; border: 1px solid #e1e4e8;"><code style="background: none; color: #24292e;">let name: string = "kino";
let age: number = 30;
let isStudent: boolean = false;</code></pre>
<p>基本の型は<code style="background: #f0f0f0; color: #24292e; padding: 0.1em 0.4em; border-radius: 3px;">string</code>（文字列）、<code style="background: #f0f0f0; color: #24292e; padding: 0.1em 0.4em; border-radius: 3px;">number</code>（数値）、<code style="background: #f0f0f0; color: #24292e; padding: 0.1em 0.4em; border-radius: 3px;">boolean</code>（真偽値）の3つを押さえておけば、日常的なコードの大半はカバーできます。</p>
<h2 style="font-size: 1.3em; margin-top: 2em; border-left: 6px solid #3178c6; padding-left: 10px;">関数の引数の型注釈</h2>
<p>関数の引数にも、変数と同じ書き方で型を指定します。</p>
<pre style="background: #f6f8fa; color: #24292e; padding: 1em; border-radius: 6px; overflow-x: auto; font-size: 0.9em; border: 1px solid #e1e4e8;"><code style="background: none; color: #24292e;">function greet(name: string) {
  console.log(`こんにちは、${name}さん`);
}

greet("kino");   // OK
greet(123);      // Error: Argument of type 'number' is not assignable to parameter of type 'string'.</code></pre>
<p>引数の型注釈は省略できないルールになっています。TypeScriptが引数の型まで推論してくれることはないため、関数を書くときは必ず引数に型を書く癖をつけておくと安全です。</p>
<h2 style="font-size: 1.3em; margin-top: 2em; border-left: 6px solid #3178c6; padding-left: 10px;">関数の戻り値の型注釈</h2>
<p>戻り値の型は、引数リストの後ろに書きます。</p>
<pre style="background: #f6f8fa; color: #24292e; padding: 1em; border-radius: 6px; overflow-x: auto; font-size: 0.9em; border: 1px solid #e1e4e8;"><code style="background: none; color: #24292e;">function add(a: number, b: number): number {
  return a + b;
}</code></pre>
<p>戻り値の型は、実は多くの場合で省略可能です（TypeScriptがreturnの中身から自動で推論してくれます）。ただし、意図しない型が返ってしまうミスに気づきやすくするため、あえて明示しておくのがおすすめです。何も値を返さない関数には、<code style="background: #f0f0f0; color: #24292e; padding: 0.1em 0.4em; border-radius: 3px;">void</code>という型を使います。</p>
<pre style="background: #f6f8fa; color: #24292e; padding: 1em; border-radius: 6px; overflow-x: auto; font-size: 0.9em; border: 1px solid #e1e4e8;"><code style="background: none; color: #24292e;">function logMessage(message: string): void {
  console.log(message);
  // 何も return しない
}</code></pre>
<h2 style="font-size: 1.3em; margin-top: 2em; border-left: 6px solid #3178c6; padding-left: 10px;">デフォルト引数・オプション引数の書き方</h2>
<p>「値を渡さなかったときの初期値」を決めておきたい場合は、デフォルト引数を使います。</p>
<pre style="background: #f6f8fa; color: #24292e; padding: 1em; border-radius: 6px; overflow-x: auto; font-size: 0.9em; border: 1px solid #e1e4e8;"><code style="background: none; color: #24292e;">function greet(name: string, honorific: string = "さん") {
  console.log(`${name}${honorific}、こんにちは`);
}

greet("kino");         // "kinoさん、こんにちは"
greet("kino", "先生"); // "kino先生、こんにちは"</code></pre>
<p>「渡しても渡さなくてもいい引数」にしたいだけであれば、オブジェクトの型定義でも紹介した<code style="background: #f0f0f0; color: #24292e; padding: 0.1em 0.4em; border-radius: 3px;">?</code>を引数にも使えます。</p>
<pre style="background: #f6f8fa; color: #24292e; padding: 1em; border-radius: 6px; overflow-x: auto; font-size: 0.9em; border: 1px solid #e1e4e8;"><code style="background: none; color: #24292e;">function greet(name: string, honorific?: string) {
  console.log(`${name}${honorific ?? ""}、こんにちは`);
}</code></pre>
<p>配列やオブジェクトの型定義における<code style="background: #f0f0f0; color: #24292e; padding: 0.1em 0.4em; border-radius: 3px;">?</code>の使い方は、こちらの記事でも紹介しています。</p>
<div class="linkcard"><div class="lkc-internal-wrap"><a class="lkc-link no_icon" href="https://kinonoteblog.com/programming/typescript-array-object-types" data-lkc-id="13"><div class="lkc-card"><div class="lkc-info"><div class="lkc-favicon"><img decoding="async" src="https://www.google.com/s2/favicons?domain=kinonoteblog.com" alt="" width="16" height="16" /></div><div class="lkc-domain">kinoblog</div></div><div class="lkc-content"><figure class="lkc-thumbnail"><img decoding="async" class="lkc-thumbnail-img" src="//kinonoteblog.com/wp-content/uploads/2026/08/The-eye-should-learn-to-listen-before-it-looks.のコピーのコピーのコピーのコピーのコピー-150x150.jpg" width="100px" height="80px" alt="" /></figure><div class="lkc-title">TypeScriptの配列・オブジェクトの型定義とは？書き方を初心者向けに解説</div><div class="lkc-date">&#x1f552;&#xfe0f;2026年8月2日</div><div class="lkc-excerpt">&nbsp;配列・オブジェクトの型定義とはTypeScriptの配列・オブジェクトの型定義とは、変数の中身がどんなデータ構造になっているかをあらかじめ決めておく書き方です。実務でもっとも書く機会が多い型の一つなので、基本を押さえておくと学習効率が上がります。文字列とか数値の型は分かったけど、配列とかオブジェクトはどう書けばいいの？実はここが一番実務で使う頻度が高いところだから、今日はここだけに絞って整理してみようなぜ配列・オブジェクトにも型定義が必要なのかJavaScriptでは、配列やオブジェクトに何を入れても自由...</div></div><div class="clear"></div></div></a></div></div>
<h2 style="font-size: 1.3em; margin-top: 2em; border-left: 6px solid #3178c6; padding-left: 10px;">アロー関数の型注釈</h2>
<p>Reactのコードなどでよく使うアロー関数も、書き方はほぼ同じです。</p>
<pre style="background: #f6f8fa; color: #24292e; padding: 1em; border-radius: 6px; overflow-x: auto; font-size: 0.9em; border: 1px solid #e1e4e8;"><code style="background: none; color: #24292e;">const add = (a: number, b: number): number =&gt; {
  return a + b;
};

const multiply = (a: number, b: number): number =&gt; a * b;</code></pre>
<p>通常の関数と違い、アロー関数は変数に代入する形になるため、変数側に型注釈を付けたくなるかもしれませんが、上記のように引数・戻り値それぞれに書くのが基本の形です。</p>
<h2 style="font-size: 1.3em; margin-top: 2em; border-left: 6px solid #3178c6; padding-left: 10px;">型注釈を省略していい場面</h2>
<p>ここまで「型注釈を書く」ことを中心に説明してきましたが、実はすべての場所に書く必要はありません。</p>
<pre style="background: #f6f8fa; color: #24292e; padding: 1em; border-radius: 6px; overflow-x: auto; font-size: 0.9em; border: 1px solid #e1e4e8;"><code style="background: none; color: #24292e;">let count = 0; // number型として自動推論されるので、型注釈は省略してOK</code></pre>
<p>初期値から型が明らかな変数や、多くの関数の戻り値は、TypeScriptの型推論に任せて省略しても問題ありません。逆に、関数の引数のように推論できない場所には必ず書く、というメリハリを意識すると、コードもすっきりします。型推論の詳しい仕組みはこちらの記事で解説しています。</p>
<div class="linkcard"><div class="lkc-internal-wrap"><a class="lkc-link no_icon" href="https://kinonoteblog.com/programming/typescript-javascript-difference" data-lkc-id="2"><div class="lkc-card"><div class="lkc-info"><div class="lkc-favicon"><img decoding="async" src="https://www.google.com/s2/favicons?domain=kinonoteblog.com" alt="" width="16" height="16" /></div><div class="lkc-domain">kinoblog</div></div><div class="lkc-content"><figure class="lkc-thumbnail"><img decoding="async" class="lkc-thumbnail-img" src="//kinonoteblog.com/wp-content/uploads/2026/07/The-eye-should-learn-to-listen-before-it-looks.のコピーのコピーのコピーのコピーのコピー-1-150x150.jpg" width="100px" height="80px" alt="" /></figure><div class="lkc-title">PHP脳のままTypeScriptを書いたら怒られた話｜初心者がつまずいた型の壁</div><div class="lkc-date">&#x1f552;&#xfe0f;2026年7月5日</div><div class="lkc-excerpt">こんにちは、キノです。今の会社ではJavaScriptとPHP・WordPress中心の運用寄りの仕事をしていますが、React系のフロントエンドエンジニアを目指しています。その一環で避けて通れなかったのがTypeScriptです。正直なところ、最初の数週間はかなり苦戦しました。この記事では、実務ではJavaScriptとPHPしか書いてこなかった人がTypeScriptで最初にぶつかる壁を、実際につまずいたポイントごとに振り返ります。同じ立場でTypeScriptを勉強し始めた人の参考になればと思います。そもそもJavaScriptとTypeScriptは何が違うのかTypeScript...</div></div><div class="clear"></div></div></a></div></div>
<h2 style="font-size: 1.3em; margin-top: 2em; border-left: 6px solid #3178c6; padding-left: 10px;">よくあるエラー</h2>
<pre style="background: #f6f8fa; color: #24292e; padding: 1em; border-radius: 6px; overflow-x: auto; font-size: 0.9em; border: 1px solid #e1e4e8;"><code style="background: none; color: #24292e;">function add(a: number, b: number): number {
  return a + b;
}

add(1); // Error: Expected 2 arguments, but got 1.</code></pre>
<p>これは、関数が必要としている引数の数と、実際に渡した数が合っていないために起きるエラーです。デフォルト引数やオプション引数（<code style="background: #f0f0f0; color: #24292e; padding: 0.1em 0.4em; border-radius: 3px;">?</code>）を使っていない引数は、必ず渡す必要があります。</p>
<h2 style="font-size: 1.3em; margin-top: 2em; border-left: 6px solid #3178c6; padding-left: 10px;">よくある質問</h2>
<p><strong>Q. 型注釈は必ず書かないといけませんか？</strong><br />
A. いいえ。関数の引数以外は、型推論に任せて省略できる場面が多いです。ただし、意図を明確にするためにあえて書くこともよくあります。</p>
<p><strong>Q. voidとは何ですか？</strong><br />
A. 何も値を返さない関数の戻り値に使う型です。<code style="background: #f0f0f0; color: #24292e; padding: 0.1em 0.4em; border-radius: 3px;">return</code>を書かない関数によく使われます。</p>
<p><strong>Q. デフォルト引数とオプション引数はどう使い分けますか？</strong><br />
A. 「値を渡さなかったときの初期値」を決めたいならデフォルト引数、「渡さなくてもエラーにしたくない」だけならオプション引数（<code style="background: #f0f0f0; color: #24292e; padding: 0.1em 0.4em; border-radius: 3px;">?</code>）を使います。</p>
<h2 style="font-size: 1.3em; margin-top: 2em; border-left: 6px solid #3178c6; padding-left: 10px;">まとめ</h2>
<ul>
<li>型注釈は変数・関数の後ろに<code style="background: #f0f0f0; color: #24292e; padding: 0.1em 0.4em; border-radius: 3px;">: 型名</code>という形で書く</li>
<li>関数の引数の型注釈は省略できないが、戻り値や初期値のある変数は省略できることが多い</li>
<li>デフォルト引数・オプション引数を使い分けると、柔軟な関数が書ける</li>
<li>アロー関数も、通常の関数と同じ考え方で型注釈を付けられる</li>
</ul>
<p>公式ドキュメントにも、関数の型についてのより詳しい解説があります。</p>
<p>&#x25b6; <a href="https://www.typescriptlang.org/docs/handbook/2/functions.html" target="_blank" rel="noopener">TypeScript公式ドキュメント：More on Functions</a></p>
<div style="margin: 1.5em 0;"><div class="voice cf r big"><figure class="icon"><img decoding="async" src="https://kinonoteblog.com/wp-content/uploads/2019/08/agura_kutsurogu1_boy.png"><figcaption class="name">少年A</figcaption></figure><div class="voicecomment">
引数は必ず書く、戻り値は省略していい場合もある、って考えるとシンプルだね</div></div>
<div class="voice cf l big"><figure class="icon"><img decoding="async" src="https://kinonoteblog.com/wp-content/uploads/2019/03/nigaoemaker.png"><figcaption class="name">キノ</figcaption></figure><div class="voicecomment">
うん。ここが体に馴染むと、他の記事で書いたinterfaceやジェネリクスもぐっと読みやすくなるよ</div></div></div>
<hr style="margin: 2.5em 0; border: none; border-top: 1px solid #ddd;" />
</article>
<p>&nbsp;</p><p>The post <a href="https://kinonoteblog.com/programming/typescript-type-annotation-basics">TypeScriptの変数・関数の型注釈とは？書き方を初心者向けに解説</a> first appeared on <a href="https://kinonoteblog.com">kinoblog</a>.</p>]]></content:encoded>
					
					<wfw:commentRss>https://kinonoteblog.com/programming/typescript-type-annotation-basics/feed</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>TypeScriptの配列・オブジェクトの型定義とは？書き方を初心者向けに解説</title>
		<link>https://kinonoteblog.com/%e6%9c%aa%e5%88%86%e9%a1%9e/typescript-array-object-types?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=typescript-array-object-types</link>
					<comments>https://kinonoteblog.com/%e6%9c%aa%e5%88%86%e9%a1%9e/typescript-array-object-types#respond</comments>
		
		<dc:creator><![CDATA[kino]]></dc:creator>
		<pubDate>Sun, 02 Aug 2026 02:46:43 +0000</pubDate>
				<category><![CDATA[未分類]]></category>
		<category><![CDATA[プログラミング]]></category>
		<category><![CDATA[TypeScript]]></category>
		<guid isPermaLink="false">https://kinonoteblog.com/?p=3297</guid>

					<description><![CDATA[<p>&#160; 配列・オブジェクトの型定義とは TypeScriptの配列・オブジェクトの型定義とは、変数の中身がどんなデータ構造になっているかをあらかじめ決めておく書き方です。実務でもっとも書く機会が多い型の一つなので、...</p>
<p>The post <a href="https://kinonoteblog.com/%e6%9c%aa%e5%88%86%e9%a1%9e/typescript-array-object-types">TypeScriptの配列・オブジェクトの型定義とは？書き方を初心者向けに解説</a> first appeared on <a href="https://kinonoteblog.com">kinoblog</a>.</p>]]></description>
										<content:encoded><![CDATA[<p>&nbsp;</p>
<article style="font-family: 'Hiragino Sans','Yu Gothic',sans-serif; line-height: 1.8; max-width: 720px; margin: 40px auto; padding: 0 16px; color: #222;">
<h2 style="font-size: 1.3em; margin-top: 1.5em; border-left: 6px solid #3178c6; padding-left: 10px;">配列・オブジェクトの型定義とは</h2>
<p><strong>TypeScriptの配列・オブジェクトの型定義とは、変数の中身がどんなデータ構造になっているかをあらかじめ決めておく書き方です。</strong>実務でもっとも書く機会が多い型の一つなので、基本を押さえておくと学習効率が上がります。</p>
<div style="margin-bottom: 1.5em;"><div class="voice cf r big"><figure class="icon"><img decoding="async" src="https://kinonoteblog.com/wp-content/uploads/2020/07/pose_aseru_.png"><figcaption class="name">少年A</figcaption></figure><div class="voicecomment">
文字列とか数値の型は分かったけど、配列とかオブジェクトはどう書けばいいの？</div></div>
<div class="voice cf l big"><figure class="icon"><img decoding="async" src="https://kinonoteblog.com/wp-content/uploads/2019/03/nigaoemaker.png"><figcaption class="name">キノ</figcaption></figure><div class="voicecomment">
実はここが一番実務で使う頻度が高いところだから、今日はここだけに絞って整理してみよう</div></div></div>
<h2 style="font-size: 1.3em; margin-top: 2em; border-left: 6px solid #3178c6; padding-left: 10px;">なぜ配列・オブジェクトにも型定義が必要なのか</h2>
<p>JavaScriptでは、配列やオブジェクトに何を入れても自由でした。</p>
<pre style="background: #f6f8fa; color: #24292e; padding: 1em; border-radius: 6px; overflow-x: auto; font-size: 0.9em; border: 1px solid #e1e4e8;"><code style="background: none; color: #24292e;">// JavaScript
const numbers = [1, 2, 3];
numbers.push("kino"); // 数値の配列のはずが、文字列も入ってしまう</code></pre>
<p>この自由さは便利な反面、意図しないデータが紛れ込んでもエラーにならないという弱点があります。TypeScriptで型を決めておけば、こうした混入をコードを書いている段階で防げます。</p>
<h2 style="font-size: 1.3em; margin-top: 2em; border-left: 6px solid #3178c6; padding-left: 10px;">配列の型定義の書き方</h2>
<p>配列の型は、主に2通りの書き方があります。</p>
<pre style="background: #f6f8fa; color: #24292e; padding: 1em; border-radius: 6px; overflow-x: auto; font-size: 0.9em; border: 1px solid #e1e4e8;"><code style="background: none; color: #24292e;">let numbers: number[] = [1, 2, 3];
let names: Array&lt;string&gt; = ["kino", "syounen"];</code></pre>
<p><code style="background: #f0f0f0; color: #24292e; padding: 0.1em 0.4em; border-radius: 3px;">number[]</code>と<code style="background: #f0f0f0; color: #24292e; padding: 0.1em 0.4em; border-radius: 3px;">Array&lt;number&gt;</code>は、どちらも「number型の値だけが入る配列」という同じ意味です。どちらを使っても動作は変わらないので、社内やチームで書き方を統一しておくと読みやすくなります。個人的には、シンプルな<code style="background: #f0f0f0; color: #24292e; padding: 0.1em 0.4em; border-radius: 3px;">型[]</code>の方をよく使っています。</p>
<h2 style="font-size: 1.3em; margin-top: 2em; border-left: 6px solid #3178c6; padding-left: 10px;">オブジェクトの型定義の書き方</h2>
<p>オブジェクトの型は、プロパティ名とその型を1つずつ列挙する形で定義します。</p>
<pre style="background: #f6f8fa; color: #24292e; padding: 1em; border-radius: 6px; overflow-x: auto; font-size: 0.9em; border: 1px solid #e1e4e8;"><code style="background: none; color: #24292e;">type User = {
  name: string;
  age: number;
};

const user: User = {
  name: "kino",
  age: 30,
};</code></pre>
<p>この書き方については、interfaceとの使い分けも含めて別記事で詳しく解説しています。</p>
<div class="linkcard"><div class="lkc-internal-wrap"><a class="lkc-link no_icon" href="https://kinonoteblog.com/programming/typescript-interface-vs-type" data-lkc-id="1"><div class="lkc-card"><div class="lkc-info"><div class="lkc-favicon"><img decoding="async" src="https://www.google.com/s2/favicons?domain=kinonoteblog.com" alt="" width="16" height="16" /></div><div class="lkc-domain">kinoblog</div></div><div class="lkc-content"><figure class="lkc-thumbnail"><img decoding="async" class="lkc-thumbnail-img" src="//kinonoteblog.com/wp-content/uploads/2026/07/TypeScriptのinterfaceとtypeの違いを、JavaScript経験者が理解するまで-150x150.jpg" width="100px" height="80px" alt="" /></figure><div class="lkc-title">TypeScriptのinterfaceとtypeの違いを、JavaScript経験者が理解するまで</div><div class="lkc-date">&#x1f552;&#xfe0f;2026年7月18日</div><div class="lkc-excerpt">&nbsp;前回、TypeScriptを学び始めて最初につまずいたポイントをいくつか紹介しました。その中でも特に地味に時間を取られたのが、interfaceとtypeの使い分けです。JavaScriptは元々そこそこ書けていたので、「型を書く」という発想自体には早く慣れました。ただ、その分「なぜ同じようなことができる書き方が2種類あるのか」がかえって気になり、調べるのに時間がかかりました。この記事では、実際のコード例をもとに違いを整理します。JavaScript経験者ほど「どっちでもよくない？」と感じる理由JavaScriptにはそもそも型という概念...</div></div><div class="clear"></div></div></a></div></div>
<h2 style="font-size: 1.3em; margin-top: 2em; border-left: 6px solid #3178c6; padding-left: 10px;">オプショナルプロパティ（?）の使い方</h2>
<p>プロパティによっては、「あってもなくてもいい」という場合があります。そのときは、プロパティ名の後ろに<code style="background: #f0f0f0; color: #24292e; padding: 0.1em 0.4em; border-radius: 3px;">?</code>を付けます。</p>
<pre style="background: #f6f8fa; color: #24292e; padding: 1em; border-radius: 6px; overflow-x: auto; font-size: 0.9em; border: 1px solid #e1e4e8;"><code style="background: none; color: #24292e;">type User = {
  name: string;
  age: number;
  nickname?: string; // なくてもOK
};

const user1: User = { name: "kino", age: 30 }; // nicknameを省略してもエラーにならない
const user2: User = { name: "kino", age: 30, nickname: "きの" }; // これもOK</code></pre>
<p>プロフィール情報のように「必須ではない項目」を扱う場面でよく使う書き方です。</p>
<h2 style="font-size: 1.3em; margin-top: 2em; border-left: 6px solid #3178c6; padding-left: 10px;">readonlyで書き換えを防ぐ</h2>
<p>「一度セットしたら変更されたくない」というプロパティには、<code style="background: #f0f0f0; color: #24292e; padding: 0.1em 0.4em; border-radius: 3px;">readonly</code>を付けられます。</p>
<pre style="background: #f6f8fa; color: #24292e; padding: 1em; border-radius: 6px; overflow-x: auto; font-size: 0.9em; border: 1px solid #e1e4e8;"><code style="background: none; color: #24292e;">type User = {
  readonly id: number;
  name: string;
};

const user: User = { id: 1, name: "kino" };
user.id = 2; // Error: Cannot assign to 'id' because it is a read-only property.</code></pre>
<p>データベースのIDのように、後から書き換わってほしくない値に付けておくと、意図しない上書きをコードの段階で防げます。</p>
<h2 style="font-size: 1.3em; margin-top: 2em; border-left: 6px solid #3178c6; padding-left: 10px;">配列とオブジェクトを組み合わせた型</h2>
<p>実務では、配列とオブジェクトを組み合わせた「オブジェクトの配列」を扱う場面が非常に多いです。</p>
<pre style="background: #f6f8fa; color: #24292e; padding: 1em; border-radius: 6px; overflow-x: auto; font-size: 0.9em; border: 1px solid #e1e4e8;"><code style="background: none; color: #24292e;">type User = {
  name: string;
  age: number;
};

const users: User[] = [
  { name: "kino", age: 30 },
  { name: "syounen", age: 20 },
];</code></pre>
<p><code style="background: #f0f0f0; color: #24292e; padding: 0.1em 0.4em; border-radius: 3px;">User[]</code>は「User型のオブジェクトが並んだ配列」という意味です。APIから複数件のデータを受け取るときなど、非常によく登場する形です。API通信で受け取ったデータに型を付ける方法は、こちらの記事も参考にしてください。</p>
<div class="linkcard"><div class="lkc-internal-wrap"><a class="lkc-link no_icon" href="https://kinonoteblog.com/programming/typescript-promise-api" data-lkc-id="11"><div class="lkc-card"><div class="lkc-info"><div class="lkc-favicon"><img decoding="async" src="https://www.google.com/s2/favicons?domain=kinonoteblog.com" alt="" width="16" height="16" /></div><div class="lkc-domain">kinoblog</div></div><div class="lkc-content"><figure class="lkc-thumbnail"><img decoding="async" class="lkc-thumbnail-img" src="//kinonoteblog.com/wp-content/uploads/2026/08/The-eye-should-learn-to-listen-before-it-looks.のコピーのコピーのコピーのコピーのコピー-2-150x150.jpg" width="100px" height="80px" alt="" /></figure><div class="lkc-title">TypeScriptのPromiseとは？API通信の型定義を初心者向けに解説</div><div class="lkc-date">&#x1f552;&#xfe0f;2026年8月1日</div><div class="lkc-excerpt">&nbsp;TypeScriptのPromise&lt;T&gt;とはTypeScriptのPromise&lt;T&gt;とは、非同期処理が最終的に返す値の型を指定する書き方です。API通信の結果に型を付けることで、レスポンスの中身をエディタの補完付きで安全に扱えるようになります。fetchでAPI叩くとき、TypeScriptだと何が変わるの？一番変わるのは「返ってきたデータの中身をちゃんと型で管理できる」ところだよこの記事では、TypeScriptでAPI通信を扱うときに必ず出てくるPromise&lt;T&gt;について、fetchを使った実例をもとに解説します。ジェネリクスの基本がまだ不安な場...</div></div><div class="clear"></div></div></a></div></div>
<h2 style="font-size: 1.3em; margin-top: 2em; border-left: 6px solid #3178c6; padding-left: 10px;">実務での使用例：Reactでの一覧表示</h2>
<p>Reactで一覧を表示する場合、<code style="background: #f0f0f0; color: #24292e; padding: 0.1em 0.4em; border-radius: 3px;">User[]</code>のようなオブジェクトの配列を<code style="background: #f0f0f0; color: #24292e; padding: 0.1em 0.4em; border-radius: 3px;">map</code>で展開するのが定番の書き方です。</p>
<pre style="background: #f6f8fa; color: #24292e; padding: 1em; border-radius: 6px; overflow-x: auto; font-size: 0.9em; border: 1px solid #e1e4e8;"><code style="background: none; color: #24292e;">function UserList({ users }: { users: User[] }) {
  return (
    &lt;ul&gt;
      {users.map((user) =&gt; (
        &lt;li key={user.name}&gt;{user.name}（{user.age}歳）&lt;/li&gt;
      ))}
    &lt;/ul&gt;
  );
}</code></pre>
<p><code style="background: #f0f0f0; color: #24292e; padding: 0.1em 0.4em; border-radius: 3px;">users</code>の型が決まっているおかげで、<code style="background: #f0f0f0; color: #24292e; padding: 0.1em 0.4em; border-radius: 3px;">user.name</code>や<code style="background: #f0f0f0; color: #24292e; padding: 0.1em 0.4em; border-radius: 3px;">user.age</code>を書くときにエディタの入力補完が効き、タイプミスにもすぐ気づけます。</p>
<h2 style="font-size: 1.3em; margin-top: 2em; border-left: 6px solid #3178c6; padding-left: 10px;">よくあるエラー</h2>
<pre style="background: #f6f8fa; color: #24292e; padding: 1em; border-radius: 6px; overflow-x: auto; font-size: 0.9em; border: 1px solid #e1e4e8;"><code style="background: none; color: #24292e;">const user: User = { name: "kino" };
// Property 'age' is missing in type '{ name: string; }' but required in type 'User'.</code></pre>
<p>これは、必須のはずの<code style="background: #f0f0f0; color: #24292e; padding: 0.1em 0.4em; border-radius: 3px;">age</code>プロパティが渡されていないために起きるエラーです。もし本当に省略可能なプロパティなら、先ほど紹介した<code style="background: #f0f0f0; color: #24292e; padding: 0.1em 0.4em; border-radius: 3px;">?</code>を付けて解決します。省略できないなら、値を渡し忘れているだけなので、そのまま追加すればOKです。</p>
<h2 style="font-size: 1.3em; margin-top: 2em; border-left: 6px solid #3178c6; padding-left: 10px;">よくある質問</h2>
<p><strong>Q. number[]とArray&lt;number&gt;はどちらを使えばいいですか？</strong><br />
A. 意味は同じなので、どちらでも構いません。チームやプロジェクトで書き方を統一するのがおすすめです。</p>
<p><strong>Q. オプショナルプロパティとreadonlyは併用できますか？</strong><br />
A. できます。<code style="background: #f0f0f0; color: #24292e; padding: 0.1em 0.4em; border-radius: 3px;">readonly nickname?: string;</code>のように組み合わせて書けます。</p>
<p><strong>Q. オブジェクトの配列はどんな場面でよく使いますか？</strong><br />
A. APIから複数件のデータを取得したときや、Reactで一覧表示を行うときに頻繁に登場します。</p>
<h2 style="font-size: 1.3em; margin-top: 2em; border-left: 6px solid #3178c6; padding-left: 10px;">まとめ</h2>
<ul>
<li>配列は<code style="background: #f0f0f0; color: #24292e; padding: 0.1em 0.4em; border-radius: 3px;">型[]</code>、オブジェクトはプロパティを列挙する形で型定義する</li>
<li>あってもなくてもいいプロパティには<code style="background: #f0f0f0; color: #24292e; padding: 0.1em 0.4em; border-radius: 3px;">?</code>を付ける</li>
<li>書き換えを防ぎたいプロパティには<code style="background: #f0f0f0; color: #24292e; padding: 0.1em 0.4em; border-radius: 3px;">readonly</code>を付ける</li>
<li>オブジェクトの配列（User[]など）は実務で非常によく使う形</li>
</ul>
<p>公式ドキュメントにも、配列やオブジェクトの型についての解説があります。</p>
<p>&#x25b6; <a href="https://www.typescriptlang.org/docs/handbook/2/everyday-types.html" target="_blank" rel="noopener">TypeScript公式ドキュメント：Everyday Types</a></p>
<div style="margin: 1.5em 0;"><div class="voice cf r big"><figure class="icon"><img decoding="async" src="https://kinonoteblog.com/wp-content/uploads/2020/07/pose_aseru_.png"><figcaption class="name">少年A</figcaption></figure><div class="voicecomment">
配列とオブジェクト、思ったよりシンプルだったかも</div></div>
<div class="voice cf l big"><figure class="icon"><img decoding="async" src="https://kinonoteblog.com/wp-content/uploads/2019/03/nigaoemaker.png"><figcaption class="name">キノ</figcaption></figure><div class="voicecomment">
うん。ここが分かると、実務のコードの大半は読めるようになるよ</div></div></div>
<hr style="margin: 2.5em 0; border: none; border-top: 1px solid #ddd;" />
</article>
<p>&nbsp;</p><p>The post <a href="https://kinonoteblog.com/%e6%9c%aa%e5%88%86%e9%a1%9e/typescript-array-object-types">TypeScriptの配列・オブジェクトの型定義とは？書き方を初心者向けに解説</a> first appeared on <a href="https://kinonoteblog.com">kinoblog</a>.</p>]]></content:encoded>
					
					<wfw:commentRss>https://kinonoteblog.com/%e6%9c%aa%e5%88%86%e9%a1%9e/typescript-array-object-types/feed</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>TypeScriptのPromiseとは？API通信の型定義を初心者向けに解説</title>
		<link>https://kinonoteblog.com/programming/typescript-promise-api?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=typescript-promise-api</link>
					<comments>https://kinonoteblog.com/programming/typescript-promise-api#respond</comments>
		
		<dc:creator><![CDATA[kino]]></dc:creator>
		<pubDate>Sat, 01 Aug 2026 11:53:42 +0000</pubDate>
				<category><![CDATA[プログラミング]]></category>
		<category><![CDATA[TypeScript]]></category>
		<guid isPermaLink="false">https://kinonoteblog.com/?p=3263</guid>

					<description><![CDATA[<p>&#160; TypeScriptのPromise&#60;T&#62;とは TypeScriptのPromise&#60;T&#62;とは、非同期処理が最終的に返す値の型を指定する書き方です。API通信の結果に型を付けることで...</p>
<p>The post <a href="https://kinonoteblog.com/programming/typescript-promise-api">TypeScriptのPromiseとは？API通信の型定義を初心者向けに解説</a> first appeared on <a href="https://kinonoteblog.com">kinoblog</a>.</p>]]></description>
										<content:encoded><![CDATA[<p>&nbsp;</p>
<article style="font-family: 'Hiragino Sans','Yu Gothic',sans-serif; line-height: 1.8; max-width: 720px; margin: 40px auto; padding: 0 16px; color: #222;">
<h2 style="font-size: 1.3em; margin-top: 1.5em; border-left: 6px solid #3178c6; padding-left: 10px;">TypeScriptのPromise&lt;T&gt;とは</h2>
<p><strong>TypeScriptのPromise&lt;T&gt;とは、非同期処理が最終的に返す値の型を指定する書き方です。API通信の結果に型を付けることで、レスポンスの中身をエディタの補完付きで安全に扱えるようになります。</strong></p>
<div style="margin-bottom: 1.5em;"><div class="voice cf r big"><figure class="icon"><img decoding="async" src="https://kinonoteblog.com/wp-content/uploads/2020/07/pose_aseru_.png"><figcaption class="name">少年A</figcaption></figure><div class="voicecomment">
fetchでAPI叩くとき、TypeScriptだと何が変わるの？</div></div>
<div class="voice cf l big"><figure class="icon"><img decoding="async" src="https://kinonoteblog.com/wp-content/uploads/2019/03/nigaoemaker.png"><figcaption class="name">キノ</figcaption></figure><div class="voicecomment">
一番変わるのは「返ってきたデータの中身をちゃんと型で管理できる」ところだよ</div></div></div>
<p>この記事では、TypeScriptでAPI通信を扱うときに必ず出てくる<code style="background: #f0f0f0; color: #24292e; padding: 0.1em 0.4em; border-radius: 3px;">Promise&lt;T&gt;</code>について、fetchを使った実例をもとに解説します。ジェネリクスの基本がまだ不安な場合は、先にこちらの記事を読んでおくと理解しやすいです。</p>
<div class="linkcard"><div class="lkc-internal-wrap"><a class="lkc-link no_icon" href="https://kinonoteblog.com/programming/typescript-generics-beginner" data-lkc-id="5"><div class="lkc-card"><div class="lkc-info"><div class="lkc-favicon"><img decoding="async" src="https://www.google.com/s2/favicons?domain=kinonoteblog.com" alt="" width="16" height="16" /></div><div class="lkc-domain">kinoblog</div></div><div class="lkc-content"><figure class="lkc-thumbnail"><img decoding="async" class="lkc-thumbnail-img" src="//kinonoteblog.com/wp-content/uploads/2026/08/The-eye-should-learn-to-listen-before-it-looks.のコピーのコピーのコピーのコピーのコピー-1-150x150.jpg" width="100px" height="80px" alt="" /></figure><div class="lkc-title">TypeScriptのジェネリクスとは？初心者向けに&lt;T&gt;の意味や使い方を分かりやす...</div><div class="lkc-date">&#x1f552;&#xfe0f;2026年8月1日</div><div class="lkc-excerpt">&nbsp;TypeScriptのジェネリクスとはTypeScriptのジェネリクスとは、型を後から指定できる仕組みです。同じ処理を複数の型で使い回せるため、コードの重複を減らしながら型安全性を保てます。前回言ってたジェネリクスってやつ、結局なんなの？最初はピンとこなかったけど、「型の引数」だと思うとしっくりきたよこの記事では、TypeScript(Generics)のジェネリクスについて、基本の書き方からany型との違い、実務での使用例、よくあるエラーまで、JavaScript経験者向けに整理します。まずは基本をまとめた記事も参考にしてください。ジ...</div></div><div class="clear"></div></div></a></div></div>
<h2 style="font-size: 1.3em; margin-top: 2em; border-left: 6px solid #3178c6; padding-left: 10px;">なぜAPI通信で型定義が必要なのか</h2>
<p>JavaScriptでfetchを使う場合、レスポンスの中身は基本的に何が返ってくるか分かりません。</p>
<pre style="background: #f6f8fa; color: #24292e; padding: 1em; border-radius: 6px; overflow-x: auto; font-size: 0.9em; border: 1px solid #e1e4e8;"><code style="background: none; color: #24292e;">// JavaScript
fetch("/api/users/1")
  .then(res =&gt; res.json())
  .then(data =&gt; {
    console.log(data.nmae); // typoしてもエラーにならず、実行するまで気づけない
  });</code></pre>
<p>プロパティ名を打ち間違えても、実行してブラウザのコンソールを見るまで気づけません。TypeScriptでレスポンスに型を付けておけば、こうしたミスをコードを書いている段階で発見できます。</p>
<h2 style="font-size: 1.3em; margin-top: 2em; border-left: 6px solid #3178c6; padding-left: 10px;">Promise&lt;T&gt;の基本の書き方</h2>
<p>非同期関数の戻り値には、<code style="background: #f0f0f0; color: #24292e; padding: 0.1em 0.4em; border-radius: 3px;">Promise&lt;型&gt;</code>という形で型を指定します。</p>
<pre style="background: #f6f8fa; color: #24292e; padding: 1em; border-radius: 6px; overflow-x: auto; font-size: 0.9em; border: 1px solid #e1e4e8;"><code style="background: none; color: #24292e;">type User = {
  id: number;
  name: string;
};

async function fetchUser(id: number): Promise {
  const res = await fetch(`/api/users/${id}`);
  return res.json();
}</code></pre>
<p>これは「この関数は、最終的にUser型の値を返すPromiseを返す」という意味です。<code style="background: #f0f0f0; color: #24292e; padding: 0.1em 0.4em; border-radius: 3px;">Promise&lt;T&gt;</code>のTの部分に、ジェネリクスと同じ考え方で好きな型を指定できます。interfaceとtypeの使い分けに迷う場合は、こちらの記事も参考にしてください。</p>
<div class="linkcard"><div class="lkc-internal-wrap"><a class="lkc-link no_icon" href="https://kinonoteblog.com/programming/typescript-interface-vs-type" data-lkc-id="1"><div class="lkc-card"><div class="lkc-info"><div class="lkc-favicon"><img decoding="async" src="https://www.google.com/s2/favicons?domain=kinonoteblog.com" alt="" width="16" height="16" /></div><div class="lkc-domain">kinoblog</div></div><div class="lkc-content"><figure class="lkc-thumbnail"><img decoding="async" class="lkc-thumbnail-img" src="//kinonoteblog.com/wp-content/uploads/2026/07/TypeScriptのinterfaceとtypeの違いを、JavaScript経験者が理解するまで-150x150.jpg" width="100px" height="80px" alt="" /></figure><div class="lkc-title">TypeScriptのinterfaceとtypeの違いを、JavaScript経験者が理解するまで</div><div class="lkc-date">&#x1f552;&#xfe0f;2026年7月18日</div><div class="lkc-excerpt">&nbsp;前回、TypeScriptを学び始めて最初につまずいたポイントをいくつか紹介しました。その中でも特に地味に時間を取られたのが、interfaceとtypeの使い分けです。JavaScriptは元々そこそこ書けていたので、「型を書く」という発想自体には早く慣れました。ただ、その分「なぜ同じようなことができる書き方が2種類あるのか」がかえって気になり、調べるのに時間がかかりました。この記事では、実際のコード例をもとに違いを整理します。JavaScript経験者ほど「どっちでもよくない？」と感じる理由JavaScriptにはそもそも型という概念...</div></div><div class="clear"></div></div></a></div></div>
<h2 style="font-size: 1.3em; margin-top: 2em; border-left: 6px solid #3178c6; padding-left: 10px;">async/awaitと型推論</h2>
<p>関数に<code style="background: #f0f0f0; color: #24292e; padding: 0.1em 0.4em; border-radius: 3px;">async</code>を付けると、戻り値は自動的にPromiseで包まれます。</p>
<pre style="background: #f6f8fa; color: #24292e; padding: 1em; border-radius: 6px; overflow-x: auto; font-size: 0.9em; border: 1px solid #e1e4e8;"><code style="background: none; color: #24292e;">async function getUser(id: number) {
  const res = await fetch(`/api/users/${id}`);
  return res.json(); // 戻り値の型注釈を省略しても、Promiseとして推論される
}</code></pre>
<p>ただし、この書き方だと戻り値が<code style="background: #f0f0f0; color: #24292e; padding: 0.1em 0.4em; border-radius: 3px;">Promise&lt;any&gt;</code>になってしまい、結局anyのデメリット（型チェックが効かない）を引きずってしまいます。API通信では戻り値の型を省略せず、明示的に書くのが安全です。</p>
<h2 style="font-size: 1.3em; margin-top: 2em; border-left: 6px solid #3178c6; padding-left: 10px;">Promise&lt;any&gt;とPromise&lt;T&gt;の違い</h2>
<table style="width: 100%; border-collapse: collapse; margin: 1em 0; font-size: 0.95em;">
<thead>
<tr style="background: #f6f8fa;">
<th style="border: 1px solid #e1e4e8; padding: 0.6em; text-align: left;">項目</th>
<th style="border: 1px solid #e1e4e8; padding: 0.6em; text-align: left;">Promise&lt;any&gt;</th>
<th style="border: 1px solid #e1e4e8; padding: 0.6em; text-align: left;">Promise&lt;具体的な型&gt;</th>
</tr>
</thead>
<tbody>
<tr>
<td style="border: 1px solid #e1e4e8; padding: 0.6em;">レスポンスの型</td>
<td style="border: 1px solid #e1e4e8; padding: 0.6em;">不明（何でも通る）</td>
<td style="border: 1px solid #e1e4e8; padding: 0.6em;">明確</td>
</tr>
<tr>
<td style="border: 1px solid #e1e4e8; padding: 0.6em;">入力補完</td>
<td style="border: 1px solid #e1e4e8; padding: 0.6em;">効かない</td>
<td style="border: 1px solid #e1e4e8; padding: 0.6em;">プロパティ名まで補完される</td>
</tr>
<tr>
<td style="border: 1px solid #e1e4e8; padding: 0.6em;">typoの検出</td>
<td style="border: 1px solid #e1e4e8; padding: 0.6em;">実行するまで気づけない</td>
<td style="border: 1px solid #e1e4e8; padding: 0.6em;">コードを書いている段階で気づける</td>
</tr>
</tbody>
</table>
<p>any全般との違いについては、こちらの記事でさらに詳しく解説しています。</p>
<div class="linkcard"><div class="lkc-internal-wrap"><a class="lkc-link no_icon" href="https://kinonoteblog.com/programming/typescript-any-unknown" data-lkc-id="3"><div class="lkc-card"><div class="lkc-info"><div class="lkc-favicon"><img decoding="async" src="https://www.google.com/s2/favicons?domain=kinonoteblog.com" alt="" width="16" height="16" /></div><div class="lkc-domain">kinoblog</div></div><div class="lkc-content"><figure class="lkc-thumbnail"><img decoding="async" class="lkc-thumbnail-img" src="//kinonoteblog.com/wp-content/uploads/2026/07/The-eye-should-learn-to-listen-before-it-looks.のコピーのコピーのコピーのコピーのコピー-1-1-150x150.jpg" width="100px" height="80px" alt="" /></figure><div class="lkc-title">TypeScriptのanyとunknownの違い｜どっちも避けるべき？初心者向け整理</div><div class="lkc-date">&#x1f552;&#xfe0f;2026年7月19日</div><div class="lkc-excerpt">&nbsp;「anyは使うな」って言われたから、じゃあ型がわからない時どうすんの？それ、まさに自分がハマった疑問。答えは「unknown」って型だったんだ「anyは使うな」で終わっていた理解前々回、TypeScriptでanyを使うと型チェックが効かなくなる、という話をしました。ただ、そのときの自分は「anyを使わなければとりあえず安全」くらいの理解で止まっていました。実際にコードを書き進めていくと、「型が何になるか分からないけど、anyは使いたくない」という場面に何度も遭遇しました。そこで出てくるのがunknownという型です。anyとu...</div></div><div class="clear"></div></div></a></div></div>
<h2 style="font-size: 1.3em; margin-top: 2em; border-left: 6px solid #3178c6; padding-left: 10px;">実務でよくあるエラー</h2>
<pre style="background: #f6f8fa; color: #24292e; padding: 1em; border-radius: 6px; overflow-x: auto; font-size: 0.9em; border: 1px solid #e1e4e8;"><code style="background: none; color: #24292e;">async function fetchUser(id: number): Promise {
  const res = await fetch(`/api/users/${id}`);
  const data = res.json();
  return data;
  // Type 'Promise' is not assignable to type 'User'.
}</code></pre>
<p>これは<code style="background: #f0f0f0; color: #24292e; padding: 0.1em 0.4em; border-radius: 3px;">res.json()</code>の前に<code style="background: #f0f0f0; color: #24292e; padding: 0.1em 0.4em; border-radius: 3px;">await</code>を付け忘れているのが原因です。<code style="background: #f0f0f0; color: #24292e; padding: 0.1em 0.4em; border-radius: 3px;">json()</code>自体もPromiseを返すメソッドなので、awaitを忘れると「PromiseのままのPromise」を返そうとしてしまい、型が一致しなくなります。</p>
<h2 style="font-size: 1.3em; margin-top: 2em; border-left: 6px solid #3178c6; padding-left: 10px;">Reactでの使用例</h2>
<p>ReactでAPI通信を行う場合、<code style="background: #f0f0f0; color: #24292e; padding: 0.1em 0.4em; border-radius: 3px;">useEffect</code>の中で先ほどの関数を呼び出し、結果をstateに保存する形がよくあるパターンです。</p>
<pre style="background: #f6f8fa; color: #24292e; padding: 1em; border-radius: 6px; overflow-x: auto; font-size: 0.9em; border: 1px solid #e1e4e8;"><code style="background: none; color: #24292e;">const [user, setUser] = useState(null);

useEffect(() =&gt; {
  fetchUser(1).then(setUser);
}, []);</code></pre>
<p><code style="background: #f0f0f0; color: #24292e; padding: 0.1em 0.4em; border-radius: 3px;">fetchUser</code>の戻り値が<code style="background: #f0f0f0; color: #24292e; padding: 0.1em 0.4em; border-radius: 3px;">Promise&lt;User&gt;</code>と分かっているので、<code style="background: #f0f0f0; color: #24292e; padding: 0.1em 0.4em; border-radius: 3px;">setUser</code>に渡す値の型もエディタが自動でチェックしてくれます。実際にReactでAPI連携を実装する中で、この型のつながりのおかげでミスに何度も助けられました。</p>
<h2 style="font-size: 1.3em; margin-top: 2em; border-left: 6px solid #3178c6; padding-left: 10px;">よくある質問</h2>
<p><strong>Q. Promise&lt;T&gt;とは何ですか？</strong><br />
A. 非同期処理が最終的に返す値の型を指定する書き方です。TはAPIレスポンスなど、実際に返ってくるデータの型に置き換えます。</p>
<p><strong>Q. なぜasyncを付けるとPromise&lt;any&gt;になるのですか？</strong><br />
A. 戻り値の型注釈を省略した場合、TypeScriptが型を推論しきれず、anyとして扱われることがあるためです。明示的に型を書くことで防げます。</p>
<p><strong>Q. fetchの型定義はどこに書けばいいですか？</strong><br />
A. fetchを呼び出す関数の戻り値に<code style="background: #f0f0f0; color: #24292e; padding: 0.1em 0.4em; border-radius: 3px;">Promise&lt;型&gt;</code>という形で書きます。レスポンスの形はtypeやinterfaceで別途定義しておくのが一般的です。</p>
<h2 style="font-size: 1.3em; margin-top: 2em; border-left: 6px solid #3178c6; padding-left: 10px;">まとめ</h2>
<ul>
<li>Promise&lt;T&gt;は、非同期処理の戻り値に型を付ける書き方</li>
<li>戻り値の型注釈を省略すると、Promise&lt;any&gt;になりやすいので注意</li>
<li>API通信の型を明示しておくと、Reactのstateと連携する際もミスに気づきやすくなる</li>
</ul>
<p>Promiseの基本的な仕組みそのものはJavaScriptの機能なので、公式ドキュメントも参考になります。</p>
<p>&#x25b6; <a href="https://developer.mozilla.org/en-US/docs/Web/API/Fetch_API/Using_Fetch" target="_blank" rel="noopener">MDN Web Docs：Using the Fetch API</a><br />
&#x25b6; <a href="https://www.typescriptlang.org/docs/handbook/2/generics.html" target="_blank" rel="noopener">TypeScript公式ドキュメント：Generics</a></p>
<div style="margin: 1.5em 0;"><div class="voice cf r big"><figure class="icon"><img decoding="async" src="https://kinonoteblog.com/wp-content/uploads/2020/07/pose_aseru_.png"><figcaption class="name">少年A</figcaption></figure><div class="voicecomment">
awaitの付け忘れ、自分もやりそう…</div></div>
<div class="voice cf l big"><figure class="icon"><img decoding="async" src="https://kinonoteblog.com/wp-content/uploads/2019/03/nigaoemaker.png"><figcaption class="name">キノ</figcaption></figure><div class="voicecomment">
エラーメッセージに「Promise」って単語が出てきたら、まずawaitの付け忘れを疑うといいよ</div></div></div>
<hr style="margin: 2.5em 0; border: none; border-top: 1px solid #ddd;" />
</article>
<p>&nbsp;</p><p>The post <a href="https://kinonoteblog.com/programming/typescript-promise-api">TypeScriptのPromiseとは？API通信の型定義を初心者向けに解説</a> first appeared on <a href="https://kinonoteblog.com">kinoblog</a>.</p>]]></content:encoded>
					
					<wfw:commentRss>https://kinonoteblog.com/programming/typescript-promise-api/feed</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>TypeScriptのジェネリクスとは？初心者向けに&#060;T&#062;の意味や使い方を分かりやすく解説</title>
		<link>https://kinonoteblog.com/programming/typescript-generics-beginner?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=typescript-generics-beginner</link>
					<comments>https://kinonoteblog.com/programming/typescript-generics-beginner#respond</comments>
		
		<dc:creator><![CDATA[kino]]></dc:creator>
		<pubDate>Sat, 01 Aug 2026 06:23:26 +0000</pubDate>
				<category><![CDATA[プログラミング]]></category>
		<category><![CDATA[TypeScript]]></category>
		<guid isPermaLink="false">https://kinonoteblog.com/?p=3250</guid>

					<description><![CDATA[<p>&#160; TypeScriptのジェネリクスとは TypeScriptのジェネリクスとは、型を後から指定できる仕組みです。同じ処理を複数の型で使い回せるため、コードの重複を減らしながら型安全性を保てます。 この記事で...</p>
<p>The post <a href="https://kinonoteblog.com/programming/typescript-generics-beginner">TypeScriptのジェネリクスとは？初心者向けに<T>の意味や使い方を分かりやすく解説</a> first appeared on <a href="https://kinonoteblog.com">kinoblog</a>.</p>]]></description>
										<content:encoded><![CDATA[<p>&nbsp;</p>
<article style="font-family: 'Hiragino Sans','Yu Gothic',sans-serif; line-height: 1.8; max-width: 720px; margin: 40px auto; padding: 0 16px; color: #222;">
<h2 style="font-size: 1.3em; margin-top: 1.5em; border-left: 6px solid #3178c6; padding-left: 10px;">TypeScriptのジェネリクスとは</h2>
<img decoding="async" class="alignnone size-full wp-image-3366" src="https://kinonoteblog.com/wp-content/uploads/2026/08/typescript-generics-diagram.webp" alt="TypeScriptのジェネリクス（T）の仕組みの図解" width="1200" height="630" srcset="https://kinonoteblog.com/wp-content/uploads/2026/08/typescript-generics-diagram.webp 1200w, https://kinonoteblog.com/wp-content/uploads/2026/08/typescript-generics-diagram-300x158.webp 300w, https://kinonoteblog.com/wp-content/uploads/2026/08/typescript-generics-diagram-1024x538.webp 1024w, https://kinonoteblog.com/wp-content/uploads/2026/08/typescript-generics-diagram-768x403.webp 768w" sizes="(max-width: 1200px) 100vw, 1200px" />
<p><strong>TypeScriptのジェネリクスとは、型を後から指定できる仕組みです。同じ処理を複数の型で使い回せるため、コードの重複を減らしながら型安全性を保てます。</strong></p>
<div style="margin-bottom: 1.5em;"><div class="voice cf r big"><figure class="icon"><img decoding="async" src="https://kinonoteblog.com/wp-content/uploads/2020/07/pose_aseru_.png"><figcaption class="name">少年A</figcaption></figure><div class="voicecomment">
前回言ってたジェネリクスってやつ、結局なんなの？</div></div>
<div class="voice cf l big"><figure class="icon"><img decoding="async" src="https://kinonoteblog.com/wp-content/uploads/2019/03/nigaoemaker.png"><figcaption class="name">キノ</figcaption></figure><div class="voicecomment">
最初はピンとこなかったけど、「型の引数」だと思うとしっくりきたよ</div></div></div>
<p>この記事では、TypeScript(Generics)のジェネリクスについて、基本の書き方からany型との違い、実務での使用例、よくあるエラーまで、JavaScript経験者向けに整理します。まずは基本をまとめた記事も参考にしてください。</p>
<div class="linkcard"><div class="lkc-internal-wrap"><a class="lkc-link no_icon" href="https://kinonoteblog.com/programming/typescript-beginner-essentials" data-lkc-id="4"><div class="lkc-card"><div class="lkc-info"><div class="lkc-favicon"><img decoding="async" src="https://www.google.com/s2/favicons?domain=kinonoteblog.com" alt="" width="16" height="16" /></div><div class="lkc-domain">kinoblog</div></div><div class="lkc-content"><figure class="lkc-thumbnail"><img decoding="async" class="lkc-thumbnail-img" src="//kinonoteblog.com/wp-content/uploads/2026/07/The-eye-should-learn-to-listen-before-it-looks.のコピーのコピーのコピーのコピーのコピー-150x150.jpg" width="100px" height="80px" alt="" /></figure><div class="lkc-title">TypeScript初心者がここだけ押さえておけばいい6つのポイント【公式ドキュメント付...</div><div class="lkc-date">&#x1f552;&#xfe0f;2026年7月30日</div><div class="lkc-excerpt">&nbsp;TypeScriptって覚えること多すぎない？結局何が分かってればいいの？正直、最初は全部理解しなくていいと思う。ここ数回で自分がつまずいたポイントを整理してみた全部を完璧に理解しようとしなくていいこれまで何回かに分けて、TypeScriptを学び始めて実際につまずいたポイントを書いてきました。振り返ってみると、公式ドキュメントを最初から全部読もうとして挫折しかけたのですが、実務で最低限困らないレベルまでは、意外と少ない知識でたどり着けると感じています。まずは前提として、JavaScriptとの違いをまだ整理できて...</div></div><div class="clear"></div></div></a></div></div>
<h2 style="font-size: 1.3em; margin-top: 2em; border-left: 6px solid #3178c6; padding-left: 10px;">ジェネリクスが必要な理由</h2>
<p>ジェネリクスの必要性を理解するために、あえてジェネリクスを使わない例から見てみます。</p>
<pre style="background: #f6f8fa; color: #24292e; padding: 1em; border-radius: 6px; overflow-x: auto; font-size: 0.9em; border: 1px solid #e1e4e8;"><code style="background: none; color: #24292e;">function identity(value: string): string {
  return value;
}

// number型を渡したい場合、同じような関数をもう一つ書く必要がある
function identityNumber(value: number): number {
  return value;
}</code></pre>
<p>「値をそのまま返すだけ」の関数なのに、型ごとに同じ処理を何度も書くのは無駄です。JavaScriptなら型を気にせず1つの関数で済んでいたはずの処理が、TypeScriptだと型の数だけ関数が増えてしまう、というのが最初にジェネリクスの必要性を感じた瞬間でした。</p>
<h2 style="font-size: 1.3em; margin-top: 2em; border-left: 6px solid #3178c6; padding-left: 10px;">&lt;T&gt;とは？基本の書き方</h2>
<p>この問題を解決するのがジェネリクスです。関数名の後ろに<code style="background: #f0f0f0; color: #24292e; padding: 0.1em 0.4em; border-radius: 3px;">&lt;T&gt;</code>という型変数（型引数）を追加します。</p>
<pre style="background: #f6f8fa; color: #24292e; padding: 1em; border-radius: 6px; overflow-x: auto; font-size: 0.9em; border: 1px solid #e1e4e8;"><code style="background: none; color: #24292e;">function identity(value: T): T {
  return value;
}

const a = identity("kino");   // string型として扱われる
const b = identity(123);      // number型として扱われる</code></pre>
<p><code style="background: #f0f0f0; color: #24292e; padding: 0.1em 0.4em; border-radius: 3px;">T</code>という文字は「型のための引数」だと考えると理解しやすいです。関数の引数に値を渡すのと同じように、<code style="background: #f0f0f0; color: #24292e; padding: 0.1em 0.4em; border-radius: 3px;">&lt;T&gt;</code>には「型」を渡している、というイメージです。慣習としてTが使われますが、複数の型変数がある場合はT、Uのようにアルファベット順で増やしていくのが一般的です。</p>
<h2 style="font-size: 1.3em; margin-top: 2em; border-left: 6px solid #3178c6; padding-left: 10px;">型推論とは？&lt;T&gt;を省略できる場面</h2>
<p>ジェネリクスは、呼び出す側で毎回型を指定しなくても、TypeScriptが自動で型を推論してくれる場合があります。</p>
<pre style="background: #f6f8fa; color: #24292e; padding: 1em; border-radius: 6px; overflow-x: auto; font-size: 0.9em; border: 1px solid #e1e4e8;"><code style="background: none; color: #24292e;">const c = identity("kino"); // を省略しても、渡した値からstring型と推論される</code></pre>
<p>型推論についての詳しい仕組みは、別記事で解説しているのでこちらもあわせてどうぞ。</p>
<div class="linkcard"><div class="lkc-internal-wrap"><a class="lkc-link no_icon" href="https://kinonoteblog.com/programming/typescript-javascript-difference" data-lkc-id="2"><div class="lkc-card"><div class="lkc-info"><div class="lkc-favicon"><img decoding="async" src="https://www.google.com/s2/favicons?domain=kinonoteblog.com" alt="" width="16" height="16" /></div><div class="lkc-domain">kinoblog</div></div><div class="lkc-content"><figure class="lkc-thumbnail"><img decoding="async" class="lkc-thumbnail-img" src="//kinonoteblog.com/wp-content/uploads/2026/07/The-eye-should-learn-to-listen-before-it-looks.のコピーのコピーのコピーのコピーのコピー-1-150x150.jpg" width="100px" height="80px" alt="" /></figure><div class="lkc-title">PHP脳のままTypeScriptを書いたら怒られた話｜初心者がつまずいた型の壁</div><div class="lkc-date">&#x1f552;&#xfe0f;2026年7月5日</div><div class="lkc-excerpt">こんにちは、キノです。今の会社ではJavaScriptとPHP・WordPress中心の運用寄りの仕事をしていますが、React系のフロントエンドエンジニアを目指しています。その一環で避けて通れなかったのがTypeScriptです。正直なところ、最初の数週間はかなり苦戦しました。この記事では、実務ではJavaScriptとPHPしか書いてこなかった人がTypeScriptで最初にぶつかる壁を、実際につまずいたポイントごとに振り返ります。同じ立場でTypeScriptを勉強し始めた人の参考になればと思います。そもそもJavaScriptとTypeScriptは何が違うのかTypeScript...</div></div><div class="clear"></div></div></a></div></div>
<h2 style="font-size: 1.3em; margin-top: 2em; border-left: 6px solid #3178c6; padding-left: 10px;">any型との違い</h2>
<p>ジェネリクスを学び始めると、「any型を使えば同じことができるのでは？」という疑問が必ず出てきます。実際に比較してみると、違いがはっきりします。</p>
<pre style="background: #f6f8fa; color: #24292e; padding: 1em; border-radius: 6px; overflow-x: auto; font-size: 0.9em; border: 1px solid #e1e4e8;"><code style="background: none; color: #24292e;">function identityAny(value: any): any {
  return value;
}

const x = identityAny("kino");
x.toFixed(); // stringにtoFixedは無いのに、コンパイルエラーにならない</code></pre>
<table style="width: 100%; border-collapse: collapse; margin: 1em 0; font-size: 0.95em;">
<thead>
<tr style="background: #f6f8fa;">
<th style="border: 1px solid #e1e4e8; padding: 0.6em; text-align: left;">項目</th>
<th style="border: 1px solid #e1e4e8; padding: 0.6em; text-align: left;">any</th>
<th style="border: 1px solid #e1e4e8; padding: 0.6em; text-align: left;">ジェネリクス（&lt;T&gt;）</th>
</tr>
</thead>
<tbody>
<tr>
<td style="border: 1px solid #e1e4e8; padding: 0.6em;">型情報</td>
<td style="border: 1px solid #e1e4e8; padding: 0.6em;">消える（何でも許可）</td>
<td style="border: 1px solid #e1e4e8; padding: 0.6em;">保持される</td>
</tr>
<tr>
<td style="border: 1px solid #e1e4e8; padding: 0.6em;">入力補完</td>
<td style="border: 1px solid #e1e4e8; padding: 0.6em;">効きにくい</td>
<td style="border: 1px solid #e1e4e8; padding: 0.6em;">型に応じて効く</td>
</tr>
<tr>
<td style="border: 1px solid #e1e4e8; padding: 0.6em;">安全性</td>
<td style="border: 1px solid #e1e4e8; padding: 0.6em;">低い（typoに気づけない）</td>
<td style="border: 1px solid #e1e4e8; padding: 0.6em;">高い</td>
</tr>
</tbody>
</table>
<p>anyとunknownの違いについては、こちらの記事でさらに詳しく解説しています。</p>
<div class="linkcard"><div class="lkc-internal-wrap"><a class="lkc-link no_icon" href="https://kinonoteblog.com/programming/typescript-any-unknown" data-lkc-id="3"><div class="lkc-card"><div class="lkc-info"><div class="lkc-favicon"><img decoding="async" src="https://www.google.com/s2/favicons?domain=kinonoteblog.com" alt="" width="16" height="16" /></div><div class="lkc-domain">kinoblog</div></div><div class="lkc-content"><figure class="lkc-thumbnail"><img decoding="async" class="lkc-thumbnail-img" src="//kinonoteblog.com/wp-content/uploads/2026/07/The-eye-should-learn-to-listen-before-it-looks.のコピーのコピーのコピーのコピーのコピー-1-1-150x150.jpg" width="100px" height="80px" alt="" /></figure><div class="lkc-title">TypeScriptのanyとunknownの違い｜どっちも避けるべき？初心者向け整理</div><div class="lkc-date">&#x1f552;&#xfe0f;2026年7月19日</div><div class="lkc-excerpt">&nbsp;「anyは使うな」って言われたから、じゃあ型がわからない時どうすんの？それ、まさに自分がハマった疑問。答えは「unknown」って型だったんだ「anyは使うな」で終わっていた理解前々回、TypeScriptでanyを使うと型チェックが効かなくなる、という話をしました。ただ、そのときの自分は「anyを使わなければとりあえず安全」くらいの理解で止まっていました。実際にコードを書き進めていくと、「型が何になるか分からないけど、anyは使いたくない」という場面に何度も遭遇しました。そこで出てくるのがunknownという型です。anyとu...</div></div><div class="clear"></div></div></a></div></div>
<h2 style="font-size: 1.3em; margin-top: 2em; border-left: 6px solid #3178c6; padding-left: 10px;">ジェネリクスのメリット</h2>
<ul>
<li>型ごとに同じ関数を何度も書かずに済む（コードの重複を減らせる）</li>
<li>anyと違い、型情報を保ったまま処理できる</li>
<li>呼び出す型に応じてエディタの入力補完が効く</li>
</ul>
<h2 style="font-size: 1.3em; margin-top: 2em; border-left: 6px solid #3178c6; padding-left: 10px;">ジェネリクスのデメリット・注意点</h2>
<p>便利な一方で、使いすぎには注意が必要だと感じています。</p>
<ul>
<li>型変数が増えるとコードが読みにくくなりやすい</li>
<li>無条件に<code style="background: #f0f0f0; color: #24292e; padding: 0.1em 0.4em; border-radius: 3px;">T</code>を受け取ると、意図しない型まで通ってしまうことがある（<code style="background: #f0f0f0; color: #24292e; padding: 0.1em 0.4em; border-radius: 3px;">extends</code>で制約を付けると防げます）</li>
<li>初心者のうちは「とりあえずジェネリクス」にせず、必要になった箇所から使う方が理解しやすい</li>
</ul>
<h2 style="font-size: 1.3em; margin-top: 2em; border-left: 6px solid #3178c6; padding-left: 10px;">実務で使う場面：React・Promiseでの例</h2>
<p>ジェネリクスというと構えてしまいますが、実はTypeScriptを書いていると意識せずに使っていることが多いです。</p>
<pre style="background: #f6f8fa; color: #24292e; padding: 1em; border-radius: 6px; overflow-x: auto; font-size: 0.9em; border: 1px solid #e1e4e8;"><code style="background: none; color: #24292e;">// Promise&lt;T&gt;：API通信の戻り値の型を指定する
async function fetchUser(id: string): Promise&lt;{ name: string; age: number }&gt; {
  const res = await fetch(`/api/users/${id}`);
  return res.json();
}

// React：useStateでも&lt;T&gt;がよく使われる
const [user, setUser] = useState&lt;{ name: string; age: number } | null&gt;(null);</code></pre>
<p><code style="background: #f0f0f0; color: #24292e; padding: 0.1em 0.4em; border-radius: 3px;">Promise&lt;T&gt;</code>や<code style="background: #f0f0f0; color: #24292e; padding: 0.1em 0.4em; border-radius: 3px;">useState&lt;T&gt;</code>の<code style="background: #f0f0f0; color: #24292e; padding: 0.1em 0.4em; border-radius: 3px;">&lt;&gt;</code>の部分も、実はジェネリクスの仕組みです。「PromiseやuseStateという入れ物に、どの型を入れるか」を指定していると考えると、身近な存在に感じられました。実際にReactでAPI連携の実装をする中で、ジェネリクスの意味を意識する場面が何度もありました。</p>
<h2 style="font-size: 1.3em; margin-top: 2em; border-left: 6px solid #3178c6; padding-left: 10px;">よくあるエラー</h2>
<pre style="background: #f6f8fa; color: #24292e; padding: 1em; border-radius: 6px; overflow-x: auto; font-size: 0.9em; border: 1px solid #e1e4e8;"><code style="background: none; color: #24292e;">function getId(param: T): number {
  return param.id;
  // Property 'id' does not exist on type 'T'.
}</code></pre>
<p>これは、<code style="background: #f0f0f0; color: #24292e; padding: 0.1em 0.4em; border-radius: 3px;">T</code>が「どんな型か分からない」状態のまま<code style="background: #f0f0f0; color: #24292e; padding: 0.1em 0.4em; border-radius: 3px;">.id</code>を使おうとして起きるエラーです。<code style="background: #f0f0f0; color: #24292e; padding: 0.1em 0.4em; border-radius: 3px;">extends</code>を使って、Tが持つべき形をあらかじめ制約しておくと解決します。</p>
<pre style="background: #f6f8fa; color: #24292e; padding: 1em; border-radius: 6px; overflow-x: auto; font-size: 0.9em; border: 1px solid #e1e4e8;"><code style="background: none; color: #24292e;">function getId(param: T): number {
  return param.id; // OK
}</code></pre>
<h2 style="font-size: 1.3em; margin-top: 2em; border-left: 6px solid #3178c6; padding-left: 10px;">よくある質問</h2>
<p><strong>Q. ジェネリクスとは何ですか？</strong><br />
A. 型を後から指定できる仕組みで、同じ処理を複数の型で使い回すために使います。</p>
<p><strong>Q. &lt;T&gt;のTって何ですか？</strong><br />
A. 「型のための引数（型変数）」です。慣習的にTという名前が使われますが、自由に名付けられます。</p>
<p><strong>Q. any型との違いは何ですか？</strong><br />
A. anyは型情報が消えてしまいますが、ジェネリクスは型情報を保ったまま処理できるため、入力補完や型チェックが効きます。</p>
<p><strong>Q. ジェネリクスはいつ使えばいいですか？</strong><br />
A. 「同じ処理を複数の型に対して行いたいとき」が目安です。配列操作、API通信のレスポンス型、Reactのstateなどでよく使われます。</p>
<h2 style="font-size: 1.3em; margin-top: 2em; border-left: 6px solid #3178c6; padding-left: 10px;">まとめ</h2>
<ul>
<li>ジェネリクスは「型を後から指定できる仕組み」で、同じ処理を型ごとに書き直す無駄を防げる</li>
<li><code style="background: #f0f0f0; color: #24292e; padding: 0.1em 0.4em; border-radius: 3px;">&lt;T&gt;</code>は型のための引数、というイメージで理解すると腹落ちしやすい</li>
<li>anyと違い型情報を保持できるため、実務ではAPI通信やReactのstateなどで頻繁に使われる</li>
</ul>
<p>公式ドキュメントにも、今回紹介した内容を含むより詳しい解説があります。</p>
<p>&#x25b6; <a href="https://www.typescriptlang.org/docs/handbook/2/generics.html" target="_blank" rel="noopener">TypeScript公式ドキュメント：Generics</a></p>
<p>もう少し実践的な使い方まで知りたい場合は、こちらの解説記事や動画も参考になります。</p>
<p>&#x25b6; <a href="https://qiita.com/rokumura7/items/25d29b5eb0b806b88a4a" target="_blank" rel="noopener">【TypeScript】ジェネリクスも便利だよ #初心者向け（Qiita）</a><br />
&#x25b6; <a href="https://www.freecodecamp.org/news/learn-typescript-with-this-crash-course/" target="_blank" rel="noopener">Learn TypeScript With This Crash Course（freeCodeCamp）</a></p>
<div style="margin: 1.5em 0;"><div class="voice cf r big"><figure class="icon"><img decoding="async" src="https://kinonoteblog.com/wp-content/uploads/2020/07/pose_aseru_.png"><figcaption class="name">少年A</figcaption></figure><div class="voicecomment">
思ったより特別なものじゃなかったんだね</div></div>
<div class="voice cf l big"><figure class="icon"><img decoding="async" src="https://kinonoteblog.com/wp-content/uploads/2019/03/nigaoemaker.png"><figcaption class="name">キノ</figcaption></figure><div class="voicecomment">
うん。「型の使い回し」だと思うと、身構えなくてよくなった</div></div></div>
<hr style="margin: 2.5em 0; border: none; border-top: 1px solid #ddd;" />
</article>
<p>&nbsp;</p><p>The post <a href="https://kinonoteblog.com/programming/typescript-generics-beginner">TypeScriptのジェネリクスとは？初心者向けに<T>の意味や使い方を分かりやすく解説</a> first appeared on <a href="https://kinonoteblog.com">kinoblog</a>.</p>]]></content:encoded>
					
					<wfw:commentRss>https://kinonoteblog.com/programming/typescript-generics-beginner/feed</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>TypeScript初心者がここだけ押さえておけばいい6つのポイント【公式ドキュメント付き】</title>
		<link>https://kinonoteblog.com/programming/typescript-beginner-essentials?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=typescript-beginner-essentials</link>
					<comments>https://kinonoteblog.com/programming/typescript-beginner-essentials#respond</comments>
		
		<dc:creator><![CDATA[kino]]></dc:creator>
		<pubDate>Thu, 30 Jul 2026 12:15:01 +0000</pubDate>
				<category><![CDATA[プログラミング]]></category>
		<category><![CDATA[TypeScript]]></category>
		<guid isPermaLink="false">https://kinonoteblog.com/?p=3231</guid>

					<description><![CDATA[<p>&#160; 全部を完璧に理解しようとしなくていい これまで何回かに分けて、TypeScriptを学び始めて実際につまずいたポイントを書いてきました。振り返ってみると、公式ドキュメントを最初から全部読もうとして挫折しかけ...</p>
<p>The post <a href="https://kinonoteblog.com/programming/typescript-beginner-essentials">TypeScript初心者がここだけ押さえておけばいい6つのポイント【公式ドキュメント付き】</a> first appeared on <a href="https://kinonoteblog.com">kinoblog</a>.</p>]]></description>
										<content:encoded><![CDATA[<p>&nbsp;</p>
<article style="font-family: 'Hiragino Sans','Yu Gothic',sans-serif; line-height: 1.8; max-width: 720px; margin: 40px auto; padding: 0 16px; color: #222;">
<div style="margin-bottom: 1.5em;"><div class="voice cf r big"><figure class="icon"><img decoding="async" src="https://kinonoteblog.com/wp-content/uploads/2020/07/pose_aseru_.png"><figcaption class="name">少年A</figcaption></figure><div class="voicecomment">
TypeScriptって覚えること多すぎない？結局何が分かってればいいの？</div></div>
<div class="voice cf l big"><figure class="icon"><img decoding="async" src="https://kinonoteblog.com/wp-content/uploads/2019/03/nigaoemaker.png"><figcaption class="name">キノ</figcaption></figure><div class="voicecomment">
正直、最初は全部理解しなくていいと思う。ここ数回で自分がつまずいたポイントを整理してみた</div></div></div>
<h2 style="font-size: 1.3em; margin-top: 1.5em; border-left: 6px solid #3178c6; padding-left: 10px;">全部を完璧に理解しようとしなくていい</h2>
<p>これまで何回かに分けて、TypeScriptを学び始めて実際につまずいたポイントを書いてきました。振り返ってみると、公式ドキュメントを最初から全部読もうとして挫折しかけたのですが、実務で最低限困らないレベルまでは、意外と少ない知識でたどり着けると感じています。</p>
<p>まずは前提として、JavaScriptとの違いをまだ整理できていない場合はこちらから読むのがおすすめです。</p>
<div class="linkcard"><div class="lkc-internal-wrap"><a class="lkc-link no_icon" href="https://kinonoteblog.com/programming/typescript-javascript-difference" data-lkc-id="2"><div class="lkc-card"><div class="lkc-info"><div class="lkc-favicon"><img decoding="async" src="https://www.google.com/s2/favicons?domain=kinonoteblog.com" alt="" width="16" height="16" /></div><div class="lkc-domain">kinoblog</div></div><div class="lkc-content"><figure class="lkc-thumbnail"><img decoding="async" class="lkc-thumbnail-img" src="//kinonoteblog.com/wp-content/uploads/2026/07/The-eye-should-learn-to-listen-before-it-looks.のコピーのコピーのコピーのコピーのコピー-1-150x150.jpg" width="100px" height="80px" alt="" /></figure><div class="lkc-title">PHP脳のままTypeScriptを書いたら怒られた話｜初心者がつまずいた型の壁</div><div class="lkc-date">&#x1f552;&#xfe0f;2026年7月5日</div><div class="lkc-excerpt">こんにちは、キノです。今の会社ではJavaScriptとPHP・WordPress中心の運用寄りの仕事をしていますが、React系のフロントエンドエンジニアを目指しています。その一環で避けて通れなかったのがTypeScriptです。正直なところ、最初の数週間はかなり苦戦しました。この記事では、実務ではJavaScriptとPHPしか書いてこなかった人がTypeScriptで最初にぶつかる壁を、実際につまずいたポイントごとに振り返ります。同じ立場でTypeScriptを勉強し始めた人の参考になればと思います。そもそもJavaScriptとTypeScriptは何が違うのかTypeScript...</div></div><div class="clear"></div></div></a></div></div>
<p>この記事では、JavaScript経験者がTypeScriptを学ぶときに、まず押さえておけば十分という6つのポイントを整理します。</p>
<h2 style="font-size: 1.3em; margin-top: 2em; border-left: 6px solid #3178c6; padding-left: 10px;">1. 変数・関数の型注釈の書き方</h2>
<pre style="background: #f6f8fa; color: #24292e; padding: 1em; border-radius: 6px; overflow-x: auto; font-size: 0.9em; border: 1px solid #e1e4e8;"><code style="background: none; color: #24292e;">let name: string = "kino";

function add(a: number, b: number): number {
  return a + b;
}</code></pre>
<p>まずはこれだけです。変数の後ろに<code style="background: #f0f0f0; color: #24292e; padding: 0.1em 0.4em; border-radius: 3px;">: 型名</code>を書く、関数は引数と戻り値それぞれに書く、という基本ルールさえ身体に馴染めば、あとの応用はだいぶ楽になります。基本の型一覧は公式ドキュメントにまとまっています。</p>
<p>&#x25b6; <a href="https://www.typescriptlang.org/docs/handbook/2/everyday-types.html" target="_blank" rel="noopener">TypeScript公式ドキュメント：Everyday Types</a></p>
<h2 style="font-size: 1.3em; margin-top: 2em; border-left: 6px solid #3178c6; padding-left: 10px;">2. 型推論に頼っていい場面を知る</h2>
<p>実はTypeScript、すべての変数に型注釈を書く必要はありません。</p>
<pre style="background: #f6f8fa; color: #24292e; padding: 1em; border-radius: 6px; overflow-x: auto; font-size: 0.9em; border: 1px solid #e1e4e8;"><code style="background: none; color: #24292e;">let count = 0; // 型注釈なしでもnumber型として推論される</code></pre>
<p>最初は「型を書かないと不安」で全部に注釈を付けていましたが、初期値から型が明らかな場合はTypeScriptが自動で推論してくれます。関数の引数など、型が推論できない場所にだけ書けば十分です。仕組みの詳細は公式ドキュメントの「Type Inference」で解説されています。</p>
<p>&#x25b6; <a href="https://www.typescriptlang.org/docs/handbook/type-inference.html" target="_blank" rel="noopener">TypeScript公式ドキュメント：Type Inference</a></p>
<h2 style="font-size: 1.3em; margin-top: 2em; border-left: 6px solid #3178c6; padding-left: 10px;">3. anyを避けてunknownを使う判断基準</h2>
<p>外部から来る値（APIレスポンスなど）で型が確定しないときは、<code style="background: #f0f0f0; color: #24292e; padding: 0.1em 0.4em; border-radius: 3px;">any</code>ではなく<code style="background: #f0f0f0; color: #24292e; padding: 0.1em 0.4em; border-radius: 3px;">unknown</code>を使い、使う前に型を確認する、というルールだけ覚えておけば実務でも困りません。実際のコード例を交えた詳しい違いは、こちらの記事で整理しています。</p>
<div>
<div><div class="linkcard"><div class="lkc-internal-wrap"><a class="lkc-link no_icon" href="https://kinonoteblog.com/programming/typescript-any-unknown" data-lkc-id="3"><div class="lkc-card"><div class="lkc-info"><div class="lkc-favicon"><img decoding="async" src="https://www.google.com/s2/favicons?domain=kinonoteblog.com" alt="" width="16" height="16" /></div><div class="lkc-domain">kinoblog</div></div><div class="lkc-content"><figure class="lkc-thumbnail"><img decoding="async" class="lkc-thumbnail-img" src="//kinonoteblog.com/wp-content/uploads/2026/07/The-eye-should-learn-to-listen-before-it-looks.のコピーのコピーのコピーのコピーのコピー-1-1-150x150.jpg" width="100px" height="80px" alt="" /></figure><div class="lkc-title">TypeScriptのanyとunknownの違い｜どっちも避けるべき？初心者向け整理</div><div class="lkc-date">&#x1f552;&#xfe0f;2026年7月19日</div><div class="lkc-excerpt">&nbsp;「anyは使うな」って言われたから、じゃあ型がわからない時どうすんの？それ、まさに自分がハマった疑問。答えは「unknown」って型だったんだ「anyは使うな」で終わっていた理解前々回、TypeScriptでanyを使うと型チェックが効かなくなる、という話をしました。ただ、そのときの自分は「anyを使わなければとりあえず安全」くらいの理解で止まっていました。実際にコードを書き進めていくと、「型が何になるか分からないけど、anyは使いたくない」という場面に何度も遭遇しました。そこで出てくるのがunknownという型です。anyとu...</div></div><div class="clear"></div></div></a></div></div></div>
</div>
<h2 style="font-size: 1.3em; margin-top: 2em; border-left: 6px solid #3178c6; padding-left: 10px;">4. interfaceとtypeは「とりあえずinterface」でいい</h2>
<p>両者の違いを理解するのは大事ですが、初心者のうちは「オブジェクトの形を決めるならinterface、それ以外（ユニオン型など）が必要になったらtype」くらいの判断で十分です。細かい違いはこちらの記事にまとめています。</p>
<div class="linkcard"><div class="lkc-internal-wrap"><a class="lkc-link no_icon" href="https://kinonoteblog.com/programming/typescript-interface-vs-type" data-lkc-id="1"><div class="lkc-card"><div class="lkc-info"><div class="lkc-favicon"><img decoding="async" src="https://www.google.com/s2/favicons?domain=kinonoteblog.com" alt="" width="16" height="16" /></div><div class="lkc-domain">kinoblog</div></div><div class="lkc-content"><figure class="lkc-thumbnail"><img decoding="async" class="lkc-thumbnail-img" src="//kinonoteblog.com/wp-content/uploads/2026/07/TypeScriptのinterfaceとtypeの違いを、JavaScript経験者が理解するまで-150x150.jpg" width="100px" height="80px" alt="" /></figure><div class="lkc-title">TypeScriptのinterfaceとtypeの違いを、JavaScript経験者が理解するまで</div><div class="lkc-date">&#x1f552;&#xfe0f;2026年7月18日</div><div class="lkc-excerpt">&nbsp;前回、TypeScriptを学び始めて最初につまずいたポイントをいくつか紹介しました。その中でも特に地味に時間を取られたのが、interfaceとtypeの使い分けです。JavaScriptは元々そこそこ書けていたので、「型を書く」という発想自体には早く慣れました。ただ、その分「なぜ同じようなことができる書き方が2種類あるのか」がかえって気になり、調べるのに時間がかかりました。この記事では、実際のコード例をもとに違いを整理します。JavaScript経験者ほど「どっちでもよくない？」と感じる理由JavaScriptにはそもそも型という概念...</div></div><div class="clear"></div></div></a></div></div>
<p>公式ドキュメントにも、interfaceとtype aliasの違いをまとめたセクションがあります。</p>
<p>&#x25b6; <a href="https://www.typescriptlang.org/docs/handbook/2/everyday-types.html#differences-between-type-aliases-and-interfaces" target="_blank" rel="noopener">TypeScript公式ドキュメント：Differences Between Type Aliases and Interfaces</a></p>
<h2 style="font-size: 1.3em; margin-top: 2em; border-left: 6px solid #3178c6; padding-left: 10px;">5. エラーメッセージは全部読む</h2>
<p>TypeScriptのエラーメッセージは長くて最初は身構えてしまいますが、多くの場合「何型を期待していて、何型が渡されたか」がそのまま書いてあります。</p>
<pre style="background: #f6f8fa; color: #24292e; padding: 1em; border-radius: 6px; overflow-x: auto; font-size: 0.9em; border: 1px solid #e1e4e8;"><code style="background: none; color: #24292e;">// Type 'number' is not assignable to type 'string'.
// → number型を渡そうとしたけど、string型を期待している</code></pre>
<p>エラーを読まずに雰囲気で直そうとすると余計に時間がかかるので、まずは英文をそのまま読む癖をつけるのが結果的に一番の近道でした。エラーの意味が分からないときは、公式のPlaygroundに同じコードを貼って挙動を確認するのもおすすめです。</p>
<p>&#x25b6; <a href="https://www.typescriptlang.org/play" target="_blank" rel="noopener">TypeScript公式Playground</a></p>
<h2 style="font-size: 1.3em; margin-top: 2em; border-left: 6px solid #3178c6; padding-left: 10px;">6. tsconfig.jsonのstrictはオンにしておく</h2>
<pre style="background: #f6f8fa; color: #24292e; padding: 1em; border-radius: 6px; overflow-x: auto; font-size: 0.9em; border: 1px solid #e1e4e8;"><code style="background: none; color: #24292e;">{
  "compilerOptions": {
    "strict": true
  }
}</code></pre>
<p>strictモードをオフにすると、型チェックがかなり緩くなり、JavaScriptに近い書き方でも通ってしまいます。最初は指摘が多くて大変ですが、実務のプロジェクトはstrictが前提になっていることが多いので、学習段階からオンにしておく方が結果的に近道です。</p>
<p>&#x25b6; <a href="https://www.typescriptlang.org/tsconfig#strict" target="_blank" rel="noopener">TypeScript公式ドキュメント：tsconfig strict</a></p>
<div style="margin: 1.5em 0;"><div class="voice cf r big"><figure class="icon"><img decoding="async" src="https://kinonoteblog.com/wp-content/uploads/2020/07/pose_aseru_.png"><figcaption class="name">少年A</figcaption></figure><div class="voicecomment">
意外と少なくない？<strong>ジャネットジャクソン</strong>・・？とかは？</div></div>
<div class="voice cf l big"><figure class="icon"><img decoding="async" src="https://kinonoteblog.com/wp-content/uploads/2019/03/nigaoemaker.png"><figcaption class="name">キノ</figcaption></figure><div class="voicecomment">
<strong>ジェネリクス</strong>とかもっと発展的な話は、この6つが身体に馴染んでからで十分だと思ってる。順番が大事</div></div></div>
<h2 style="font-size: 1.3em; margin-top: 2em; border-left: 6px solid #3178c6; padding-left: 10px;">もっと体系的に学びたい場合</h2>
<p>この記事はあくまで「つまずきポイントの整理」なので、体系的に学び直したい場合はこちらの解説記事も参考になります。</p>
<p>&#x25b6; <a href="https://zenn.dev/shunsuke_stack/articles/typescript-basics-for-beginners" target="_blank" rel="noopener">【2026年版】TypeScriptとは？</a><a href="https://zenn.dev/shunsuke_stack/articles/typescript-basics-for-beginners" target="_blank" rel="noopener">なぜ流行ったのかを初心者向けにやさしく解説（Zenn）</a></p>
<h2 style="font-size: 1.3em; margin-top: 2em; border-left: 6px solid #3178c6; padding-left: 10px;">まとめ</h2>
<p>JavaScriptがある程度書けている状態からTypeScriptを学ぶ場合、新しく覚えることは「型の書き方」と「型を確認してから使う癖」の2つに集約される気がしています。最初から完璧を目指さず、この6つを押さえたうえで、実際に手を動かしながら少しずつ知識を広げていくのが遠回りなようで一番早いと感じています。</p>
<hr style="margin: 2.5em 0; border: none; border-top: 1px solid #ddd;" />
</article>
<p>&nbsp;</p><p>The post <a href="https://kinonoteblog.com/programming/typescript-beginner-essentials">TypeScript初心者がここだけ押さえておけばいい6つのポイント【公式ドキュメント付き】</a> first appeared on <a href="https://kinonoteblog.com">kinoblog</a>.</p>]]></content:encoded>
					
					<wfw:commentRss>https://kinonoteblog.com/programming/typescript-beginner-essentials/feed</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
