<?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>Mon, 12 Oct 2026 03:21:48 +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の違いは？使い分けを初心者向けに解説</div><div class="lkc-date">&#x1f552;&#xfe0f;2026年7月18日</div><div class="lkc-excerpt">interfaceとtypeって、どっちもオブジェクトの型を書けるけど、何が違うの？実は、普通のオブジェクトならほぼ同じなんだ。違いが出る場面だけ押さえれば迷わなくなるよじゃあ、どんなときに違いが出るの？大きくは2つ。ユニオン型と、同じ名前での定義の追加。順番に見ていこうTypeScriptのinterfaceとtypeの違いとは？結論は2つだけTypeScript の interface と type の違いは、主にユニオン型などを書けるのが type、同じ名前で定義を追加できるのが interface という2点です。オブジェクトの形を表すだけなら、どちらを使ってもほと...</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">fetchでデータを取ってきたのに、プロパティ名を間違えてて、画面に出すまで気づかなかったよ…あるあるだね。じゃあ聞くけど、API通信の関数に Promise&lt;User&gt; って書くと、何が変わると思う？うーん、User型のデータが返ってくるって分かる、とか？でも、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">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>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">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>
<img decoding="async" class="alignnone size-full wp-image-3392" src="https://kinonoteblog.com/wp-content/uploads/2026/08/typescript-tsx-file.webp" alt="tsxファイルとは：.tsと.tsxの違いを、JSXを書けるか・用途・型アサーションで比較した図" width="1200" height="630" srcset="https://kinonoteblog.com/wp-content/uploads/2026/08/typescript-tsx-file.webp 1200w, https://kinonoteblog.com/wp-content/uploads/2026/08/typescript-tsx-file-300x158.webp 300w, https://kinonoteblog.com/wp-content/uploads/2026/08/typescript-tsx-file-1024x538.webp 1024w, https://kinonoteblog.com/wp-content/uploads/2026/08/typescript-tsx-file-768x403.webp 768w" sizes="(max-width: 1200px) 100vw, 1200px" />
<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">fetchでデータを取ってきたのに、プロパティ名を間違えてて、画面に出すまで気づかなかったよ…あるあるだね。じゃあ聞くけど、API通信の関数に Promise&lt;User&gt; って書くと、何が変わると思う？うーん、User型のデータが返ってくるって分かる、とか？でも、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">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>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[<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">
tsc index.ts でコンパイルはできたけど、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 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">
最初に押さえるのは4つだけ。順番に見ていこう</div></div>
<div id="ez-toc-container" class="ez-toc-v2_0_72 ez-toc-wrap-center counter-hierarchy ez-toc-counter ez-toc-light-blue ez-toc-container-direction">
<div class="ez-toc-title-container">
<p class="ez-toc-title" style="cursor:inherit">目次</p>
<span class="ez-toc-title-toggle"><a href="#" class="ez-toc-pull-right ez-toc-btn ez-toc-btn-xs ez-toc-btn-default ez-toc-toggle" aria-label="Toggle Table of Content"><span class="ez-toc-js-icon-con"><span class=""><span class="eztoc-hide" style="display:none;">Toggle</span><span class="ez-toc-icon-toggle-span"><svg style="fill: #999;color:#999" xmlns="http://www.w3.org/2000/svg" class="list-377408" width="20px" height="20px" viewBox="0 0 24 24" fill="none"><path d="M6 6H4v2h2V6zm14 0H8v2h12V6zM4 11h2v2H4v-2zm16 0H8v2h12v-2zM4 16h2v2H4v-2zm16 0H8v2h12v-2z" fill="currentColor"></path></svg><svg style="fill: #999;color:#999" class="arrow-unsorted-368013" xmlns="http://www.w3.org/2000/svg" width="10px" height="10px" viewBox="0 0 24 24" version="1.2" baseProfile="tiny"><path d="M18.2 9.3l-6.2-6.3-6.2 6.3c-.2.2-.3.4-.3.7s.1.5.3.7c.2.2.4.3.7.3h11c.3 0 .5-.1.7-.3.2-.2.3-.5.3-.7s-.1-.5-.3-.7zM5.8 14.7l6.2 6.3 6.2-6.3c.2-.2.3-.5.3-.7s-.1-.5-.3-.7c-.2-.2-.4-.3-.7-.3h-11c-.3 0-.5.1-.7.3-.2.2-.3.5-.3.7s.1.5.3.7z"/></svg></span></span></span></a></span></div>
<nav><ul class='ez-toc-list ez-toc-list-level-1 ' ><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class="ez-toc-link ez-toc-heading-1" href="https://kinonoteblog.com/programming/typescript-tsconfig-beginner/#tsconfigjson%E3%81%A8%E3%81%AF%EF%BC%9F%E3%82%B3%E3%83%B3%E3%83%91%E3%82%A4%E3%83%AB%E8%A8%AD%E5%AE%9A%E3%82%92%E3%81%BE%E3%81%A8%E3%82%81%E3%82%8B%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB" title="tsconfig.jsonとは？コンパイル設定をまとめるファイル">tsconfig.jsonとは？コンパイル設定をまとめるファイル</a></li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class="ez-toc-link ez-toc-heading-2" href="https://kinonoteblog.com/programming/typescript-tsconfig-beginner/#%E3%81%AA%E3%81%9Ctsconfigjson%E3%81%8C%E5%BF%85%E8%A6%81%E3%81%AA%E3%81%AE%E3%81%8B" title="なぜtsconfig.jsonが必要なのか">なぜtsconfig.jsonが必要なのか</a></li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class="ez-toc-link ez-toc-heading-3" href="https://kinonoteblog.com/programming/typescript-tsconfig-beginner/#tsc_-init%E3%81%A7tsconfigjson%E3%82%92%E4%BD%9C%E3%82%8B%E6%96%B9%E6%B3%95" title="tsc --initでtsconfig.jsonを作る方法">tsc --initでtsconfig.jsonを作る方法</a></li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class="ez-toc-link ez-toc-heading-4" href="https://kinonoteblog.com/programming/typescript-tsconfig-beginner/#%E6%9C%80%E4%BD%8E%E9%99%90%E3%81%8A%E3%81%95%E3%81%88%E3%81%A6%E3%81%8A%E3%81%8D%E3%81%9F%E3%81%84%E8%A8%AD%E5%AE%9A%E9%A0%85%E7%9B%AE" title="最低限おさえておきたい設定項目">最低限おさえておきたい設定項目</a></li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class="ez-toc-link ez-toc-heading-5" href="https://kinonoteblog.com/programming/typescript-tsconfig-beginner/#target%E3%81%A8%E3%81%AF%EF%BC%9A%E5%A4%89%E6%8F%9B%E5%BE%8C%E3%81%AEJavaScript%E3%81%AE%E3%83%90%E3%83%BC%E3%82%B8%E3%83%A7%E3%83%B3" title="targetとは：変換後のJavaScriptのバージョン">targetとは：変換後のJavaScriptのバージョン</a></li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class="ez-toc-link ez-toc-heading-6" href="https://kinonoteblog.com/programming/typescript-tsconfig-beginner/#outDir%E3%83%BBrootDir%E3%81%A7%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%82%92%E6%95%B4%E7%90%86%E3%81%99%E3%82%8B" title="outDir・rootDirでファイルを整理する">outDir・rootDirでファイルを整理する</a></li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class="ez-toc-link ez-toc-heading-7" href="https://kinonoteblog.com/programming/typescript-tsconfig-beginner/#include%E3%83%BBexclude%E3%81%A7%E3%82%B3%E3%83%B3%E3%83%91%E3%82%A4%E3%83%AB%E5%AF%BE%E8%B1%A1%E3%82%92%E6%B1%BA%E3%82%81%E3%82%8B" title="include・excludeでコンパイル対象を決める">include・excludeでコンパイル対象を決める</a></li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class="ez-toc-link ez-toc-heading-8" href="https://kinonoteblog.com/programming/typescript-tsconfig-beginner/#strict%E3%81%A8%E3%81%AF%EF%BC%9A%E5%9E%8B%E3%83%81%E3%82%A7%E3%83%83%E3%82%AF%E3%81%AE%E5%8E%B3%E3%81%97%E3%81%95" title="strictとは：型チェックの厳しさ">strictとは：型チェックの厳しさ</a></li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class="ez-toc-link ez-toc-heading-9" href="https://kinonoteblog.com/programming/typescript-tsconfig-beginner/#tsconfigjson%E3%81%A7%E3%82%88%E3%81%8F%E3%81%82%E3%82%8B%E3%82%A8%E3%83%A9%E3%83%BC%E3%81%A8%E5%AF%BE%E5%87%A6" title="tsconfig.jsonでよくあるエラーと対処">tsconfig.jsonでよくあるエラーと対処</a><ul class='ez-toc-list-level-3' ><li class='ez-toc-heading-level-3'><a class="ez-toc-link ez-toc-heading-10" href="https://kinonoteblog.com/programming/typescript-tsconfig-beginner/#1_error_TS18003_No_inputs_were_found_in_config_file" title="1. error TS18003: No inputs were found in config file">1. error TS18003: No inputs were found in config file</a></li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class="ez-toc-link ez-toc-heading-11" href="https://kinonoteblog.com/programming/typescript-tsconfig-beginner/#2_error_TS6059_File_%E2%80%A6_is_not_under_%E2%80%98rootDir" title="2. error TS6059: File &#8230; is not under &#8216;rootDir&#8217;">2. error TS6059: File &#8230; is not under &#8216;rootDir&#8217;</a></li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class="ez-toc-link ez-toc-heading-12" href="https://kinonoteblog.com/programming/typescript-tsconfig-beginner/#3_error_TS18028_Private_identifiers_are_only_available_when_targeting_ECMAScript_2015_and_higher" title="3. error TS18028: Private identifiers are only available when targeting ECMAScript 2015 and higher.">3. error TS18028: Private identifiers are only available when targeting ECMAScript 2015 and higher.</a></li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class="ez-toc-link ez-toc-heading-13" href="https://kinonoteblog.com/programming/typescript-tsconfig-beginner/#4_tsx%E3%82%92%E4%BD%BF%E3%81%86%E3%81%AE%E3%81%AB%E3%82%A8%E3%83%A9%E3%83%BC%E3%81%8C%E5%87%BA%E3%82%8B" title="4. .tsxを使うのにエラーが出る">4. .tsxを使うのにエラーが出る</a></li></ul></li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class="ez-toc-link ez-toc-heading-14" href="https://kinonoteblog.com/programming/typescript-tsconfig-beginner/#%E3%82%88%E3%81%8F%E3%81%82%E3%82%8B%E8%B3%AA%E5%95%8F" title="よくある質問">よくある質問</a></li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class="ez-toc-link ez-toc-heading-15" href="https://kinonoteblog.com/programming/typescript-tsconfig-beginner/#%E3%81%BE%E3%81%A8%E3%82%81%EF%BC%9Atsconfigjson%E3%81%A8%E3%81%AF%E4%BD%95%E3%81%8B%E3%81%AE%E3%81%8A%E3%81%95%E3%82%89%E3%81%84" title="まとめ：tsconfig.jsonとは何かのおさらい">まとめ：tsconfig.jsonとは何かのおさらい</a></li></ul></nav></div>

<h2>tsconfig.jsonとは？コンパイル設定をまとめるファイル</h2>
<p><strong>tsconfig.jsonとは、TypeScriptのコンパイル方法を、プロジェクト単位でまとめて設定するファイルです。</strong>どのファイルをコンパイルするか、どのJavaScriptに変換するか、型チェックをどれだけ厳しくするかを、1か所に書いておけます。</p>
<img decoding="async" class="alignnone size-full wp-image-3390" src="https://kinonoteblog.com/wp-content/uploads/2026/08/typescript-tsconfig-beginner.webp" alt="tsconfig.json とは：target・outDir・rootDir・strictの設定どおりに、tscがsrcのTypeScriptをdistのJavaScriptに変換する図" width="1200" height="630" srcset="https://kinonoteblog.com/wp-content/uploads/2026/08/typescript-tsconfig-beginner.webp 1200w, https://kinonoteblog.com/wp-content/uploads/2026/08/typescript-tsconfig-beginner-300x158.webp 300w, https://kinonoteblog.com/wp-content/uploads/2026/08/typescript-tsconfig-beginner-1024x538.webp 1024w, https://kinonoteblog.com/wp-content/uploads/2026/08/typescript-tsconfig-beginner-768x403.webp 768w" sizes="(max-width: 1200px) 100vw, 1200px" />
<div style="overflow-x: auto;">
<table style="border-collapse: collapse; width: 100%;">
<thead>
<tr>
<th style="border: 1px solid #e1e4e8; padding: 0.6em 0.8em; background: #f6f8fa; text-align: left;"></th>
<th style="border: 1px solid #e1e4e8; padding: 0.6em 0.8em; background: #f6f8fa; text-align: left;">tsconfig.jsonなし</th>
<th style="border: 1px solid #e1e4e8; padding: 0.6em 0.8em; background: #f6f8fa; text-align: left;">tsconfig.jsonあり</th>
</tr>
</thead>
<tbody>
<tr>
<td style="border: 1px solid #e1e4e8; padding: 0.6em 0.8em; vertical-align: top;">コンパイルのコマンド</td>
<td style="border: 1px solid #e1e4e8; padding: 0.6em 0.8em; vertical-align: top;"><code>tsc index.ts</code>（ファイルを毎回指定）</td>
<td style="border: 1px solid #e1e4e8; padding: 0.6em 0.8em; vertical-align: top;"><code>tsc</code>（これだけで全体を変換）</td>
</tr>
<tr>
<td style="border: 1px solid #e1e4e8; padding: 0.6em 0.8em; vertical-align: top;">設定</td>
<td style="border: 1px solid #e1e4e8; padding: 0.6em 0.8em; vertical-align: top;">毎回オプションを書く</td>
<td style="border: 1px solid #e1e4e8; padding: 0.6em 0.8em; vertical-align: top;">ファイルに1回書けば済む</td>
</tr>
<tr>
<td style="border: 1px solid #e1e4e8; padding: 0.6em 0.8em; vertical-align: top;">向いている場面</td>
<td style="border: 1px solid #e1e4e8; padding: 0.6em 0.8em; vertical-align: top;">1ファイルの動作確認</td>
<td style="border: 1px solid #e1e4e8; padding: 0.6em 0.8em; vertical-align: top;">複数ファイルのプロジェクト</td>
</tr>
</tbody>
</table>
</div>
<h2>なぜtsconfig.jsonが必要なのか</h2>
<p>ファイルが増えると、<code>tsc index.ts</code> を1つずつ実行するのは現実的ではありません。tsconfig.jsonを置いておけば、プロジェクトのルートで <code>tsc</code> と打つだけで、対象のファイルをまとめて変換できます。</p>
<p>ひとつ注意点があります。<strong>ファイル名を指定して <code>tsc src/index.ts</code> のように実行すると、tsconfig.jsonは読み込まれません。</strong>実際に試すと、<code>outDir</code> を <code>dist</code> にしていても、<code>src/index.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;"># tsconfig.json があるプロジェクトで
tsc src/index.ts   # 設定は無視される。src/index.js が src の中にできる
tsc                # tsconfig.json の設定どおりに変換される（outDir が dist なら dist/index.js）</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-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><code>tsc --init</code>でtsconfig.jsonを作る方法</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><code>Created a new tsconfig.json</code> と表示されれば成功です。生成される中身はTypeScriptのバージョンによって違います。TypeScript 5.9.3で生成したときは、コメントを除くと次の設定が入っていました。</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": {
    "module": "nodenext",
    "target": "esnext",
    "types": [],
    "sourceMap": true,
    "declaration": true,
    "declarationMap": true,
    "noUncheckedIndexedAccess": true,
    "exactOptionalPropertyTypes": true,
    "strict": true,
    "jsx": "react-jsx",
    "verbatimModuleSyntax": true,
    "isolatedModules": true,
    "noUncheckedSideEffectImports": true,
    "moduleDetection": "force",
    "skipLibCheck": true
  }
}</code></pre>
<p>古いバージョンではコメントアウトされた項目が大量に並んでいましたが、最近のバージョンは必要最低限の設定になっています。<strong>生成された設定は、そのまま使うより、自分のプロジェクトに合わせて見直すのがおすすめです。</strong></p>
<h2>最低限おさえておきたい設定項目</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",
    "module": "commonjs",
    "outDir": "./dist",
    "rootDir": "./src",
    "strict": true
  },
  "include": ["src"]
}</code></pre>
<div style="overflow-x: auto;">
<table style="border-collapse: collapse; width: 100%;">
<thead>
<tr>
<th style="border: 1px solid #e1e4e8; padding: 0.6em 0.8em; background: #f6f8fa; text-align: left;">設定</th>
<th style="border: 1px solid #e1e4e8; padding: 0.6em 0.8em; background: #f6f8fa; text-align: left;">意味</th>
</tr>
</thead>
<tbody>
<tr>
<td style="border: 1px solid #e1e4e8; padding: 0.6em 0.8em; vertical-align: top;"><code>target</code></td>
<td style="border: 1px solid #e1e4e8; padding: 0.6em 0.8em; vertical-align: top;">変換後のJavaScriptのバージョン</td>
</tr>
<tr>
<td style="border: 1px solid #e1e4e8; padding: 0.6em 0.8em; vertical-align: top;"><code>module</code></td>
<td style="border: 1px solid #e1e4e8; padding: 0.6em 0.8em; vertical-align: top;">変換後のモジュール形式（<code>commonjs</code> や <code>nodenext</code> など）</td>
</tr>
<tr>
<td style="border: 1px solid #e1e4e8; padding: 0.6em 0.8em; vertical-align: top;"><code>outDir</code></td>
<td style="border: 1px solid #e1e4e8; padding: 0.6em 0.8em; vertical-align: top;">変換後のファイルの出力先</td>
</tr>
<tr>
<td style="border: 1px solid #e1e4e8; padding: 0.6em 0.8em; vertical-align: top;"><code>rootDir</code></td>
<td style="border: 1px solid #e1e4e8; padding: 0.6em 0.8em; vertical-align: top;">ソースファイルのルートディレクトリ</td>
</tr>
<tr>
<td style="border: 1px solid #e1e4e8; padding: 0.6em 0.8em; vertical-align: top;"><code>strict</code></td>
<td style="border: 1px solid #e1e4e8; padding: 0.6em 0.8em; vertical-align: top;">型チェックを厳しくする設定のまとめ</td>
</tr>
<tr>
<td style="border: 1px solid #e1e4e8; padding: 0.6em 0.8em; vertical-align: top;"><code>include</code></td>
<td style="border: 1px solid #e1e4e8; padding: 0.6em 0.8em; vertical-align: top;">コンパイル対象のファイル・ディレクトリ</td>
</tr>
</tbody>
</table>
</div>
<p><code>module</code> は実行環境（Node.jsのバージョンや使うバンドラ）によって最適な値が変わるため、まずは公式ドキュメントの説明を確認してください。</p>
<div class="linkcard"><div class="lkc-external-wrap"><a class="lkc-link no_icon" href="https://www.typescriptlang.org/tsconfig" data-lkc-id="28" target="_blank" rel="external noopener"><div class="lkc-card"><div class="lkc-info"><div class="lkc-favicon"><img decoding="async" src="https://www.google.com/s2/favicons?domain=www.typescriptlang.org" alt="" width="16" height="16" /></div><div class="lkc-domain">www.typescriptlang.org</div></div><div class="lkc-content"><figure class="lkc-thumbnail"><img decoding="async" class="lkc-thumbnail-img" src="https://s.wordpress.com/mshots/v1/https%3A%2F%2Fwww.typescriptlang.org%2Ftsconfig?w=200" width="100px" height="80px" alt="" /></figure><div class="lkc-title">TSConfig Reference - Docs on every TSConfig option</div><div class="lkc-url" title="https://www.typescriptlang.org/tsconfig">https://www.typescriptlang.org/tsconfig</div><div class="lkc-excerpt">From allowJs to useDefineForClassFields the TSConfig reference includes information about all of the active compiler flags setting up a TypeScript project.</div></div><div class="clear"></div></div></a></div></div>
<h2>targetとは：変換後のJavaScriptのバージョン</h2>
<p><code>target</code> は、TypeScriptをどのバージョンのJavaScriptに変換するかを決める設定です。同じコードでも、<code>target</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;">// 元のTypeScript
const f = (x: number) =&gt; `v=${x}`;

// target: ES2020 のときの出力
const f = (x) =&gt; `v=${x}`;

// target: ES5 のときの出力
var f = function (x) { return "v=".concat(x); };</code></pre>
<p><code>target</code> を古くすると、新しい構文が古い書き方に置き換わります。また、古すぎる <code>target</code> では使えない構文もあります。たとえばクラスのプライベートフィールド（<code>#p</code>）を <code>ES5</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;">error TS18028: Private identifiers are only available when targeting ECMAScript 2015 and higher.</code></pre>
<p><code>target</code> の選び方は、<strong>コードを動かす環境が対応している最新のバージョン</strong>が基本です。迷う場合は、最近のNode.jsやブラウザなら <code>ES2020</code> 以上を指定しておけば問題になることはほとんどありません。</p>
<h2>outDir・rootDirでファイルを整理する</h2>
<p><code>outDir</code> は出力先、<code>rootDir</code> はソースのルートです。次のように設定すると、<code>src</code> の中のファイルが <code>dist</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;">プロジェクト/
├─ src/
│   └─ index.ts      ← 書くのはここ
├─ dist/
│   └─ index.js      ← tsc が出力する
└─ tsconfig.json</code></pre>
<p>この構成にしておくと、ソース（<code>.ts</code>）と変換後のファイル（<code>.js</code>）が混ざらず、<code>dist</code> をまるごと <code>.gitignore</code> に入れられます。</p>
<h2>include・excludeでコンパイル対象を決める</h2>
<p><code>include</code> には、コンパイルしたいディレクトリやファイルを書きます。<code>exclude</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;">{
  "compilerOptions": {
    "outDir": "./dist",
    "rootDir": "./src"
  },
  "include": ["src"],
  "exclude": ["node_modules", "dist"]
}</code></pre>
<p><code>include</code> を書かない場合は、tsconfig.jsonがあるディレクトリ以下のTypeScriptファイルがすべて対象になります。意図しないファイルを変換しないよう、<code>include</code> は書いておくのがおすすめです。</p>
<h2>strictとは：型チェックの厳しさ</h2>
<p><code>strict: true</code> にすると、型チェックに関する厳しい設定がまとめて有効になります。たとえば、次のコードは <code>strict</code> が <code>false</code> だとエラーになりませんが、<code>true</code> にすると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;">function greet(name) {
  return "Hello " + name;
}
let user: string = null;</code></pre>
<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;">a.ts(1,16): error TS7006: Parameter 'name' implicitly has an 'any' type.
a.ts(4,5): error TS2322: Type 'null' is not assignable to type 'string'.</code></pre>
<p>引数の型を書き忘れる（暗黙の <code>any</code>）ミスや、<code>null</code> を入れてしまうミスを、コンパイル時に見つけられます。新しく始めるプロジェクトでは、最初から <code>strict: true</code> にしておくのがおすすめです。</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>
<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>tsconfig.jsonでよくあるエラーと対処</h2>
<h3>1. error TS18003: No inputs were found in config file</h3>
<p><code>include</code> に指定した場所に <code>.ts</code> ファイルがないときのエラーです。<code>include</code> のパスが正しいか、ファイルが <code>src</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;">error TS18003: No inputs were found in config file '.../tsconfig.json'. Specified 'include' paths were '["src"]' and 'exclude' paths were '[]'.</code></pre>
<h3>2. error TS6059: File &#8230; is not under &#8216;rootDir&#8217;</h3>
<p><code>rootDir</code> の外にあるファイルが、コンパイル対象に含まれているときのエラーです。<code>include</code> と <code>rootDir</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;">error TS6059: File '.../lib/b.ts' is not under 'rootDir' '.../src'. 'rootDir' is expected to contain all source files.</code></pre>
<h3>3. error TS18028: Private identifiers are only available when targeting ECMAScript 2015 and higher.</h3>
<p><code>target</code> が古すぎるのが原因です。<code>ES2015</code> 以上に変更してください。</p>
<h3>4. .tsxを使うのにエラーが出る</h3>
<p>JSXを書くには、<code>jsx</code> の設定が必要です。詳しくはこちらで解説しています。</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">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>よくある質問</h2>
<p><strong>Q. tsconfig.jsonは必ず作らないといけませんか？</strong><br />
A. 1ファイルを試すだけなら不要です。複数のファイルを扱う、設定を固定したい、といった場合は作っておくと楽になります。</p>
<p><strong>Q. <code>tsc --init</code>で生成された設定はそのまま使ってよいですか？</strong><br />
A. 動作はしますが、<code>include</code> や <code>outDir</code> などを自分のプロジェクトに合わせて見直すのがおすすめです。生成される内容は、TypeScriptのバージョンによっても違います。</p>
<p><strong>Q. targetは何を選べばよいですか？</strong><br />
A. コードを動かす環境が対応している最新のバージョンが基本です。迷ったら <code>ES2020</code> 以上にしておけば、まず問題になりません。</p>
<p><strong>Q. tsc src/index.tsと実行すると、tsconfig.jsonの設定は効きますか？</strong><br />
A. 効きません。ファイル名を指定すると、tsconfig.jsonは読み込まれないため、設定を使いたいときは <code>tsc</code> だけで実行してください。</p>
<h2>まとめ：tsconfig.jsonとは何かのおさらい</h2>
<ul>
<li>tsconfig.jsonは、コンパイル設定をプロジェクト単位でまとめるファイル</li>
<li><code>tsc --init</code> で作れる。中身はバージョンによって違うので、自分のプロジェクトに合わせて見直す</li>
<li>最初に覚えるのは <code>target</code>・<code>outDir</code>・<code>rootDir</code>・<code>strict</code>（＋ <code>include</code>）</li>
<li>ファイル名を指定した <code>tsc index.ts</code> では、tsconfig.jsonは使われない</li>
<li>新しいプロジェクトは、最初から <code>strict: true</code> がおすすめ</li>
</ul>
<p>型の書き方を整理したい方は、こちらもあわせてどうぞ。</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>
<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の違いは？使い分けを初心者向けに解説</div><div class="lkc-date">&#x1f552;&#xfe0f;2026年7月18日</div><div class="lkc-excerpt">interfaceとtypeって、どっちもオブジェクトの型を書けるけど、何が違うの？実は、普通のオブジェクトならほぼ同じなんだ。違いが出る場面だけ押さえれば迷わなくなるよじゃあ、どんなときに違いが出るの？大きくは2つ。ユニオン型と、同じ名前での定義の追加。順番に見ていこうTypeScriptのinterfaceとtypeの違いとは？結論は2つだけTypeScript の interface と type の違いは、主にユニオン型などを書けるのが type、同じ名前で定義を追加できるのが interface という2点です。オブジェクトの形を表すだけなら、どちらを使ってもほと...</div></div><div class="clear"></div></div></a></div></div>
<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><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/programming/typescript-array-object-types?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=typescript-array-object-types</link>
					<comments>https://kinonoteblog.com/programming/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[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/programming/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の違いは？使い分けを初心者向けに解説</div><div class="lkc-date">&#x1f552;&#xfe0f;2026年7月18日</div><div class="lkc-excerpt">interfaceとtypeって、どっちもオブジェクトの型を書けるけど、何が違うの？実は、普通のオブジェクトならほぼ同じなんだ。違いが出る場面だけ押さえれば迷わなくなるよじゃあ、どんなときに違いが出るの？大きくは2つ。ユニオン型と、同じ名前での定義の追加。順番に見ていこうTypeScriptのinterfaceとtypeの違いとは？結論は2つだけTypeScript の interface と type の違いは、主にユニオン型などを書けるのが type、同じ名前で定義を追加できるのが interface という2点です。オブジェクトの形を表すだけなら、どちらを使ってもほと...</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">fetchでデータを取ってきたのに、プロパティ名を間違えてて、画面に出すまで気づかなかったよ…あるあるだね。じゃあ聞くけど、API通信の関数に Promise&lt;User&gt; って書くと、何が変わると思う？うーん、User型のデータが返ってくるって分かる、とか？でも、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/programming/typescript-array-object-types">TypeScriptの配列・オブジェクトの型定義とは？書き方を初心者向けに解説</a> first appeared on <a href="https://kinonoteblog.com">kinoblog</a>.</p>]]></content:encoded>
					
					<wfw:commentRss>https://kinonoteblog.com/programming/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>TypeScriptのPromise&#60;T&#62;とは TypeScriptのPromise&#60;T&#62;とは、非同期処理が最終的に返す値の型を指定する書き方です。TypeScript Promiseでは、たとえ...</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[<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">
fetchでデータを取ってきたのに、プロパティ名を間違えてて、画面に出すまで気づかなかったよ…</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">
あるあるだね。じゃあ聞くけど、API通信の関数に <strong>Promise&lt;User&gt;</strong> って書くと、何が変わると思う？</div></div>
<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">
うーん、User型のデータが返ってくるって分かる、とか？でも、fetchは「あとで」結果が返ってくるんだよね。そんな値にも型を付けられるの？</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 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">
それが今日のテーマだよ。fetchの実例で、Promise&lt;T&gt;の書き方から、付けないときの落とし穴まで、順番に見ていこう</div></div>
<h2>TypeScriptのPromise&lt;T&gt;とは</h2>
<p><strong>TypeScriptのPromise&lt;T&gt;とは、非同期処理が最終的に返す値の型を指定する書き方です。</strong>TypeScript Promiseでは、たとえば <code>Promise&lt;User&gt;</code> と書くと、「あとで <code>User</code> 型の値が返ってくる処理」という意味になります。</p>
<p>API通信の結果に型を付けると、レスポンスの中身をエディタの補完付きで安全に扱えるようになります。この記事では、fetchを使った実例で、Promise&lt;T&gt;の書き方からエラー処理、Reactでの使い方までを整理します。</p>
<p>Promiseは、非同期処理の「結果の入れ物」のようなオブジェクトです。次の3つの状態があります。</p>
<div style="overflow-x: auto;">
<table style="border-collapse: collapse; width: 100%;">
<thead>
<tr>
<th style="border: 1px solid #e1e4e8; padding: 0.6em 0.8em; background: #f6f8fa; text-align: left;">状態</th>
<th style="border: 1px solid #e1e4e8; padding: 0.6em 0.8em; background: #f6f8fa; text-align: left;">意味</th>
</tr>
</thead>
<tbody>
<tr>
<td style="border: 1px solid #e1e4e8; padding: 0.6em 0.8em; vertical-align: top;">待機中（pending）</td>
<td style="border: 1px solid #e1e4e8; padding: 0.6em 0.8em; vertical-align: top;">処理がまだ終わっていない状態</td>
</tr>
<tr>
<td style="border: 1px solid #e1e4e8; padding: 0.6em 0.8em; vertical-align: top;">成功（fulfilled）</td>
<td style="border: 1px solid #e1e4e8; padding: 0.6em 0.8em; vertical-align: top;">処理が成功し、値を取り出せる状態。<code>Promise&lt;T&gt;</code> の <code>T</code> は、この値の型です</td>
</tr>
<tr>
<td style="border: 1px solid #e1e4e8; padding: 0.6em 0.8em; vertical-align: top;">失敗（rejected）</td>
<td style="border: 1px solid #e1e4e8; padding: 0.6em 0.8em; vertical-align: top;">処理が失敗した状態。<code>catch</code> で受け取ります</td>
</tr>
</tbody>
</table>
</div>
<p><code>&lt;T&gt;</code> の部分はジェネリクスです。ジェネリクスの基本がまだ不安な方は、こちらを先にご覧ください。</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のジェネリクスとは？Tの意味と使い方を初心者向けに解説</div><div class="lkc-date">&#x1f552;&#xfe0f;2026年8月1日</div><div class="lkc-excerpt">TypeScriptの &lt;T&gt; って何？ジェネリクスって難しそうで避けてたんだけど…実は「型を引数みたいに受け取る仕組み」ってだけなんだ。まずはなぜ必要なのかから見てみようany じゃだめなの？それがだめな理由が、ジェネリクスの出番そのものなんだ。順番にいくよTypeScriptのジェネリクスとは？型を引数として受け取る仕組みTypeScript ジェネリクスとは、関数や型の定義時には型を決めず、使うときに型を渡せるようにする仕組みです。型を「引数」のように受け取るため、同じ処理を型ごとに書き直さずに、型安全に使い回せます。関...</div></div><div class="clear"></div></div></a></div></div>
<h2>API通信にPromise&lt;T&gt;の型定義が必要な理由</h2>
<p>JavaScriptでは、APIから返ってきたデータに何が入っているのかを、コードから読み取れません。プロパティ名のタイプミス（<code>user.nmae</code> など）も、実行して <code>undefined</code> が出るまで気づけません。</p>
<p>Promise&lt;T&gt;で型を付けると、次のような違いが出ます。</p>
<ul>
<li><strong>書いている時点でタイプミスに気づける</strong>：存在しないプロパティに赤線が出ます</li>
<li><strong>入力補完が効く</strong>：<code>user.</code> と打つだけで、使えるプロパティが候補に出ます</li>
<li><strong>APIの変更に気づきやすい</strong>：型定義を直すと、影響するコードがエラーとして一覧で分かります</li>
</ul>
<h2>基本の書き方：async関数にPromise&lt;User&gt;を付ける</h2>
<p>API通信の関数は、<code>async</code> 関数の戻り値に <code>Promise&lt;User&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;
  email: string;
};

async function fetchUser(id: number): Promise&lt;User&gt; {
  const res = await fetch(`https://api.example.com/users/${id}`);
  if (!res.ok) {
    throw new Error(`HTTP ${res.status}`);
  }
  const data: User = await res.json();
  return data;
}</code></pre>
<p>ポイントは3つです。</p>
<ul>
<li><strong>戻り値は <code>Promise&lt;User&gt;</code> と書く</strong>：<code>async</code> 関数は、値を Promise に包んで返します。そのため <code>: User</code> ではなく <code>: Promise&lt;User&gt;</code> と書きます</li>
<li><strong><code>res.ok</code> を確認する</strong>：<code>fetch</code> は、404や500のようなエラーのレスポンスでは reject されません（MDN）。<code>res.ok</code> が <code>false</code> のときは、自分で例外を投げます</li>
<li><strong><code>await res.json()</code> の結果に型を付ける</strong>：<code>data</code> に <code>User</code> と書くことで、以降は <code>User</code> として扱われます</li>
</ul>
<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>
<p>ここでは <code>type</code> で定義していますが、<code>interface</code> でも同じように使えます。違いが気になる方はこちらをどうぞ。</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の違いは？使い分けを初心者向けに解説</div><div class="lkc-date">&#x1f552;&#xfe0f;2026年7月18日</div><div class="lkc-excerpt">interfaceとtypeって、どっちもオブジェクトの型を書けるけど、何が違うの？実は、普通のオブジェクトならほぼ同じなんだ。違いが出る場面だけ押さえれば迷わなくなるよじゃあ、どんなときに違いが出るの？大きくは2つ。ユニオン型と、同じ名前での定義の追加。順番に見ていこうTypeScriptのinterfaceとtypeの違いとは？結論は2つだけTypeScript の interface と type の違いは、主にユニオン型などを書けるのが type、同じ名前で定義を追加できるのが interface という2点です。オブジェクトの形を表すだけなら、どちらを使ってもほと...</div></div><div class="clear"></div></div></a></div></div>
<h2>戻り値の型注釈を省略するとどうなるか</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;">// 戻り値の型注釈がない
async function fetchUserLoose(id: number) {
  const res = await fetch(`https://api.example.com/users/${id}`);
  return res.json(); // 戻り値は Promise&lt;any&gt; になる
}

async function demo() {
  const user = await fetchUserLoose(1);
  console.log(user.nmae); // タイプミスでもエラーにならない
}</code></pre>
<p><code>res.json()</code> の戻り値は <code>Promise&lt;any&gt;</code> です。そのため、注釈を省略した関数の戻り値も <code>Promise&lt;any&gt;</code> と推論され、<code>user.nmae</code> のようなタイプミスでもエラーになりません。</p>
<p>戻り値に <code>Promise&lt;User&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;">async function demo() {
  const user = await fetchUser(1); // Promise&lt;User&gt; を返す関数
  console.log(user.nmae);
  // Property 'nmae' does not exist on type 'User'.
}</code></pre>
<h3>型注釈は「宣言」であって「検証」ではない</h3>
<p>注意したいのは、<code>const data: User = await res.json()</code> と書いても、実行時にレスポンスの中身が本当に <code>User</code> かどうかは確認されない点です。型は「こういう形で返ってくるはず」という宣言にすぎません。</p>
<p>APIが仕様と違う値を返した場合は、型が合っていても実行時にエラーになることがあります。外部のAPIなど、中身を信頼しきれない場合は、実行時にデータを検証するライブラリ（zodなど）を使うと安全です。<code>any</code> と <code>unknown</code> の違いや、<code>as</code> で型を付ける書き方は、次の記事で解説しています。</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>
<div class="linkcard"><div class="lkc-internal-wrap"><a class="lkc-link no_icon" href="https://kinonoteblog.com/programming/type-assertion" data-lkc-id="18"><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.のコピーのコピーのコピーのコピーのコピー-6-150x150.webp" width="100px" height="80px" alt="" /></figure><div class="lkc-title">TypeScriptの型アサーション（as）とは？使い方と注意点を初心者向けに解説</div><div class="lkc-date">&#x1f552;&#xfe0f;2026年8月15日</div><div class="lkc-excerpt">&nbsp;TypeScriptの型アサーション（as）とはTypeScriptの型アサーションとは、asを使って「この値はこの型だ」と開発者側から指定する書き方です。TypeScriptの自動判定より、開発者が型を分かっている場面で使います。コードでよく見る「as」って何なの？型を書いてるようには見えるけど便利なんだけど、使いすぎると危ない子でもあるんだ。今日は使いどころと注意点をセットで覚えようなぜ型アサーションが必要なのかTypeScriptは多くの場合、値の型を自動で判定してくれます。しかし、TypeScriptより開発者の方が「この値の型」を...</div></div><div class="clear"></div></div></a></div></div>
<h2>Promise&lt;any&gt;とPromise&lt;T&gt;の違い</h2>
<p>ここまでの違いを、表にまとめます。</p>
<div style="overflow-x: auto;">
<table style="border-collapse: collapse; width: 100%;">
<thead>
<tr>
<th style="border: 1px solid #e1e4e8; padding: 0.6em 0.8em; background: #f6f8fa; text-align: left;">比較項目</th>
<th style="border: 1px solid #e1e4e8; padding: 0.6em 0.8em; background: #f6f8fa; text-align: left;">Promise&lt;any&gt;</th>
<th style="border: 1px solid #e1e4e8; padding: 0.6em 0.8em; background: #f6f8fa; text-align: left;">Promise&lt;User&gt;</th>
</tr>
</thead>
<tbody>
<tr>
<td style="border: 1px solid #e1e4e8; padding: 0.6em 0.8em; vertical-align: top;">型チェック</td>
<td style="border: 1px solid #e1e4e8; padding: 0.6em 0.8em; vertical-align: top;">効かない</td>
<td style="border: 1px solid #e1e4e8; padding: 0.6em 0.8em; vertical-align: top;">効く</td>
</tr>
<tr>
<td style="border: 1px solid #e1e4e8; padding: 0.6em 0.8em; vertical-align: top;">入力補完</td>
<td style="border: 1px solid #e1e4e8; padding: 0.6em 0.8em; vertical-align: top;">出ない</td>
<td style="border: 1px solid #e1e4e8; padding: 0.6em 0.8em; vertical-align: top;">出る</td>
</tr>
<tr>
<td style="border: 1px solid #e1e4e8; padding: 0.6em 0.8em; vertical-align: top;">タイプミスの検出</td>
<td style="border: 1px solid #e1e4e8; padding: 0.6em 0.8em; vertical-align: top;">実行して初めて気づく</td>
<td style="border: 1px solid #e1e4e8; padding: 0.6em 0.8em; vertical-align: top;">書いている時点で気づく</td>
</tr>
<tr>
<td style="border: 1px solid #e1e4e8; padding: 0.6em 0.8em; vertical-align: top;">呼び出し側への影響</td>
<td style="border: 1px solid #e1e4e8; padding: 0.6em 0.8em; vertical-align: top;">any が引き継がれ、型チェックが効かない範囲が広がる</td>
<td style="border: 1px solid #e1e4e8; padding: 0.6em 0.8em; vertical-align: top;"><code>User</code> として安全に扱える</td>
</tr>
<tr>
<td style="border: 1px solid #e1e4e8; padding: 0.6em 0.8em; vertical-align: top;">向いている場面</td>
<td style="border: 1px solid #e1e4e8; padding: 0.6em 0.8em; vertical-align: top;">型が決まっていない試作コード</td>
<td style="border: 1px solid #e1e4e8; padding: 0.6em 0.8em; vertical-align: top;">本番で動かすコード</td>
</tr>
</tbody>
</table>
</div>
<h2>Promise&lt;void&gt;・Promise.allなど、よく使う書き方</h2>
<p>API通信では、次のような書き方がよく出てきます。</p>
<div style="overflow-x: auto;">
<table style="border-collapse: collapse; width: 100%;">
<thead>
<tr>
<th style="border: 1px solid #e1e4e8; padding: 0.6em 0.8em; background: #f6f8fa; text-align: left;">書き方</th>
<th style="border: 1px solid #e1e4e8; padding: 0.6em 0.8em; background: #f6f8fa; text-align: left;">意味</th>
</tr>
</thead>
<tbody>
<tr>
<td style="border: 1px solid #e1e4e8; padding: 0.6em 0.8em; vertical-align: top;"><code>Promise&lt;void&gt;</code></td>
<td style="border: 1px solid #e1e4e8; padding: 0.6em 0.8em; vertical-align: top;">値を返さない非同期処理（保存、削除など）</td>
</tr>
<tr>
<td style="border: 1px solid #e1e4e8; padding: 0.6em 0.8em; vertical-align: top;"><code>Promise&lt;Post[]&gt;</code></td>
<td style="border: 1px solid #e1e4e8; padding: 0.6em 0.8em; vertical-align: top;">配列を返す非同期処理</td>
</tr>
<tr>
<td style="border: 1px solid #e1e4e8; padding: 0.6em 0.8em; vertical-align: top;"><code>Promise&lt;User | null&gt;</code></td>
<td style="border: 1px solid #e1e4e8; padding: 0.6em 0.8em; vertical-align: top;">見つからないときは <code>null</code> を返す非同期処理</td>
</tr>
<tr>
<td style="border: 1px solid #e1e4e8; padding: 0.6em 0.8em; vertical-align: top;"><code>Promise.all</code></td>
<td style="border: 1px solid #e1e4e8; padding: 0.6em 0.8em; vertical-align: top;">複数の通信を同時に実行し、結果をまとめて受け取る</td>
</tr>
</tbody>
</table>
</div>
<p><code>User | null</code> のようなユニオン型については、こちらで解説しています。</p>
<div class="linkcard"><div class="lkc-internal-wrap"><a class="lkc-link no_icon" href="https://kinonoteblog.com/programming/typescript-union-type" data-lkc-id="20"><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.webp" width="100px" height="80px" alt="" /></figure><div class="lkc-title">TypeScriptのunion型とは？「AかBか」の型の書き方を初心者向けに解説</div><div class="lkc-date">&#x1f552;&#xfe0f;2026年8月16日</div><div class="lkc-excerpt">&nbsp;TypeScriptのunion型とはTypeScriptのunion型（ユニオン型）とは、「AかBのどちらか」というように、複数の型のいずれかを表す型です。縦棒|で型をつなげて書きます。&quot;success&quot; | &quot;error&quot; みたいな縦棒でつなぐやつ、あれ何なの？それがunion型。実務だと状態管理とかで毎日のように使うから、押さえておくと強いよなぜunion型が必要なのか1つの値が「複数の型のどれか」になる場面は、実務でよくあります。例えば、入力欄に入れるIDが「数値のときも文字列のときもある」といったケースです。// numberでも...</div></div><div class="clear"></div></div></a></div></div>
<p>配列の型（<code>Post[]</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>
<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 Post = {
  id: number;
  title: string;
};

// 値を返さない処理は Promise&lt;void&gt;
async function saveUser(user: User): Promise&lt;void&gt; {
  const res = await fetch("https://api.example.com/users", {
    method: "POST",
    headers: { "Content-Type": "application/json" },
    body: JSON.stringify(user),
  });
  if (!res.ok) {
    throw new Error(`HTTP ${res.status}`);
  }
}

// 配列を返す処理は Promise&lt;Post[]&gt;
async function fetchPosts(userId: number): Promise&lt;Post[]&gt; {
  const res = await fetch(`https://api.example.com/users/${userId}/posts`);
  if (!res.ok) {
    throw new Error(`HTTP ${res.status}`);
  }
  return res.json();
}

async function loadAll() {
  // 2つの通信を同時に実行。結果は [User, Post[]] として扱える
  const [user, posts] = await Promise.all([fetchUser(1), fetchPosts(1)]);
  console.log(user.name, posts.length);
}</code></pre>
<p><code>Promise.all</code> に関数の配列を渡すと、結果は <code>[User, Post[]]</code> のように、順番ごとに型が付いて返ってきます。どちらの通信も終わってから次に進むため、順番に <code>await</code> するより待ち時間が短くなります。</p>
<p>関数の戻り値から、Promiseの中身の型を取り出したいときは <code>Awaited</code> を使います。（TypeScript 4.5以降）</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 の中身の型（User）を取り出す
type Resolved = Awaited&lt;ReturnType&lt;typeof fetchUser&gt;&gt;;</code></pre>
<p>この例では、<code>Resolved</code> は <code>User</code> になります。</p>
<h2>エラー処理：try/catchとres.okの確認</h2>
<p>非同期処理が失敗した（rejectedになった）ときは、<code>try/catch</code> で受け取ります。<code>fetch</code> は、通信そのものが失敗したときだけ reject されます。404や500のようなレスポンスは、<code>res.ok</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;">async function showEmail() {
  try {
    const user = await fetchUser(2);
    console.log(user.email);
  } catch (error) {
    // strict では error は unknown 型。そのままでは error.message を読めない
    if (error instanceof Error) {
      console.error(error.message);
    }
  }
}</code></pre>
<p><code>strict</code> を有効にしていると、<code>catch</code> の <code>error</code> は <code>unknown</code> 型になります。そのため、<code>instanceof Error</code> で絞り込んでから <code>message</code> を読みます。<code>strict</code> の設定は、<code>tsconfig.json</code> で行います。</p>
<div class="linkcard"><div class="lkc-internal-wrap"><a class="lkc-link no_icon" href="https://kinonoteblog.com/programming/typescript-tsconfig-beginner" data-lkc-id="19"><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.のコピーのコピーのコピーのコピーのコピー-3-150x150.webp" width="100px" height="80px" alt="" /></figure><div class="lkc-title">tsconfig.jsonとは？初期設定の作り方を初心者向けに解説</div><div class="lkc-date">&#x1f552;&#xfe0f;2026年8月9日</div><div class="lkc-excerpt">tsc index.ts でコンパイルはできたけど、tsconfig.json ってファイルもよく見かけるよね。あれは何なの？プロジェクトのコンパイル設定をまとめておくファイルだよ。なくても動くけど、あると毎回の手間がなくなるんだ設定ってたくさんありそうで、どれを触ればいいか分からない…最初に押さえるのは4つだけ。順番に見ていこうtsconfig.jsonとは？コンパイル設定をまとめるファイルtsconfig.jsonとは、TypeScriptのコンパイル方法を、プロジェクト単位でまとめて設定するファイルです。どのファイルをコンパイルするか、どのJavaScript...</div></div><div class="clear"></div></div></a></div></div>
<h2>Reactでの使用例</h2>
<p>Reactでは、<code>useEffect</code> の中でAPI通信の関数を呼び、結果を <code>useState</code> に保存する形がよく使われます。このコードは <code>.tsx</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;">import { useEffect, useState } from "react";

function UserCard({ id }: { id: number }) {
  const [user, setUser] = useState&lt;User | null&gt;(null);
  const [error, setError] = useState&lt;string | null&gt;(null);

  useEffect(() =&gt; {
    let ignore = false; // 古いレスポンスで state を上書きしないための目印

    fetchUser(id)
      .then((data) =&gt; {
        if (!ignore) setUser(data);
      })
      .catch((e: unknown) =&gt; {
        if (!ignore) setError(e instanceof Error ? e.message : "unknown error");
      });

    return () =&gt; {
      ignore = true;
    };
  }, [id]);

  if (error) return &lt;p&gt;エラー: {error}&lt;/p&gt;;
  if (!user) return &lt;p&gt;読み込み中...&lt;/p&gt;;
  return &lt;p&gt;{user.name}&lt;/p&gt;;
}</code></pre>
<ul>
<li><code>useState&lt;User | null&gt;(null)</code> のように、取得前は <code>null</code> を許す型にします</li>
<li><code>useEffect</code> に渡す関数は、直接 <code>async</code> にできません。そのため <code>.then()</code> でつなぐか、中で <code>async</code> 関数を定義して呼びます</li>
<li><code>ignore</code> の目印は、<code>id</code> が切り替わったときに、古いレスポンスで state を上書きしないためのものです。レスポンスは、送った順番どおりに届くとは限りません（React公式ドキュメントでも紹介されています）</li>
</ul>
<p>なお、React公式ドキュメントでは、フレームワークやデータ取得用のライブラリが提供する機能を使うほうが効率的だと説明されています。まずは仕組みを理解するために、この形を押さえておくと役立ちます。</p>
<p>.tsと.tsxの使い分けは、こちらの記事で解説しています。</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">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>よくあるエラーと対処</h2>
<h3>1. Type &#8216;Promise&lt;User&gt;&#8217; is missing the following properties from type &#8216;User&#8217;</h3>
<p><code>await</code> を付け忘れたときのエラーです。Promiseのまま、<code>User</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;">// NG：await を付け忘れた
const user: User = fetchUser(1);
// Type 'Promise&lt;User&gt;' is missing the following properties from type 'User': id, name, email

// OK
const user2: User = await fetchUser(1);</code></pre>
<h3>2. Property &#8216;name&#8217; does not exist on type &#8216;Promise&lt;User&gt;&#8217;</h3>
<p>これも <code>await</code> の付け忘れです。Promiseそのものには <code>name</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;">// NG：Promise のまま .name を読もうとした
const name = fetchUser(1).name;
// Property 'name' does not exist on type 'Promise&lt;User&gt;'.

// OK
const name2 = (await fetchUser(1)).name;</code></pre>
<h3>3. &#8216;await&#8217; expressions are only allowed within async functions</h3>
<p><code>async</code> が付いていない関数の中で <code>await</code> を使ったときのエラーです。関数に <code>async</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;">// NG：async のない関数の中で await を使った
function getName() {
  const user = await fetchUser(1);
  // 'await' expressions are only allowed within async functions and at the top levels of modules.
  return user.name;
}

// OK：async を付けて、戻り値を Promise&lt;string&gt; にする
async function getNameFixed(): Promise&lt;string&gt; {
  const user = await fetchUser(1);
  return user.name;
}</code></pre>
<h2>よくある質問</h2>
<p><strong>Q. Promise&lt;T&gt;のTには何を入れますか？</strong><br />
A. 処理が成功したときに取り出せる値の型を入れます。ユーザー情報を返すなら <code>Promise&lt;User&gt;</code>、値を返さないなら <code>Promise&lt;void&gt;</code> です。</p>
<p><strong>Q. async関数の戻り値に「: User」と書いてもいいですか？</strong><br />
A. 書けません。<code>async</code> 関数の戻り値の型は、<code>Promise&lt;User&gt;</code> のように Promise に包んで書きます。</p>
<p><strong>Q. res.json() の結果は、型チェックされますか？</strong><br />
A. されません。<code>res.json()</code> は <code>Promise&lt;any&gt;</code> を返すため、型を付けても実行時の検証にはなりません。信頼できないAPIの場合は、zodなどで実行時に検証します。</p>
<p><strong>Q. fetchは、404エラーのときにrejectされますか？</strong><br />
A. されません。通信そのものが失敗したときだけ reject されます。404や500のときは、<code>res.ok</code> を確認して、自分で例外を投げます。</p>
<p><strong>Q. thenとasync/awaitは、どちらを使えばいいですか？</strong><br />
A. どちらも同じPromiseを扱う書き方です。普段は読みやすい <code>async/await</code> がおすすめです。Reactの <code>useEffect</code> の中では、直接 <code>async</code> にできないため、<code>.then()</code> を使うか、中に <code>async</code> 関数を定義します。</p>
<h2>まとめ：TypeScript Promise とは何かのおさらい</h2>
<ul>
<li>Promise&lt;T&gt;は、非同期処理が最終的に返す値の型を指定する書き方</li>
<li><code>async</code> 関数の戻り値は <code>Promise&lt;User&gt;</code> のように書く</li>
<li>戻り値の型注釈を省略すると、<code>res.json()</code> の <code>any</code> が引き継がれ、タイプミスに気づけない</li>
<li>型注釈は実行時の検証ではない。信頼できないAPIは、実行時にも検証する</li>
<li><code>fetch</code> は404でもrejectされないので、<code>res.ok</code> を確認する</li>
</ul>
<p>公式ドキュメントにも、詳しい解説があります。</p>
<div class="linkcard"><div class="lkc-external-wrap"><a class="lkc-link no_icon" href="https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/Promise" data-lkc-id="21" target="_blank" rel="external noopener"><div class="lkc-card"><div class="lkc-info"><div class="lkc-favicon"><img decoding="async" src="https://www.google.com/s2/favicons?domain=developer.mozilla.org" alt="" width="16" height="16" /></div><div class="lkc-domain">MDN Web Docs</div></div><div class="lkc-content"><figure class="lkc-thumbnail"><img decoding="async" class="lkc-thumbnail-img" src="//kinonoteblog.com/wp-content/uploads/pz-linkcard/cache/27c56e9864b436c0c3b0d237365685a48ad2e44a0b4bd2d4af1aebf84d7b7e77.webp" width="100px" height="80px" alt="" /></figure><div class="lkc-title">Promise - JavaScript | MDN</div><div class="lkc-url" title="https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/Promise">https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/Promise</div><div class="lkc-excerpt">Promise オブジェクトは、非同期処理の完了（もしくは失敗）の結果およびその結果の値を表します。</div></div><div class="clear"></div></div></a></div></div>
<div class="linkcard"><div class="lkc-external-wrap"><a class="lkc-link no_icon" href="https://developer.mozilla.org/ja/docs/Web/API/Fetch_API/Using_Fetch" data-lkc-id="22" target="_blank" rel="external noopener"><div class="lkc-card"><div class="lkc-info"><div class="lkc-favicon"><img decoding="async" src="https://www.google.com/s2/favicons?domain=developer.mozilla.org" alt="" width="16" height="16" /></div><div class="lkc-domain">MDN Web Docs</div></div><div class="lkc-content"><figure class="lkc-thumbnail"><img decoding="async" class="lkc-thumbnail-img" src="//kinonoteblog.com/wp-content/uploads/pz-linkcard/cache/27c56e9864b436c0c3b0d237365685a48ad2e44a0b4bd2d4af1aebf84d7b7e77.webp" width="100px" height="80px" alt="" /></figure><div class="lkc-title">フェッチ API の使用 - Web API | MDN</div><div class="lkc-url" title="https://developer.mozilla.org/ja/docs/Web/API/Fetch_API/Using_Fetch">https://developer.mozilla.org/ja/docs/Web/API/Fetch_API/Using_Fetch</div><div class="lkc-excerpt">フェッチ API は、HTTP リクエストを行い、レスポンスを処理するための JavaScript インターフェイスを提供します。</div></div><div class="clear"></div></div></a></div></div>
<div class="linkcard"><div class="lkc-external-wrap"><a class="lkc-link no_icon" href="https://www.typescriptlang.org/docs/handbook/utility-types.html#awaitedtype" data-lkc-id="23" target="_blank" rel="external noopener"><div class="lkc-card"><div class="lkc-info"><div class="lkc-favicon"><img decoding="async" src="https://www.google.com/s2/favicons?domain=www.typescriptlang.org" alt="" width="16" height="16" /></div><div class="lkc-domain">www.typescriptlang.org</div></div><div class="lkc-content"><figure class="lkc-thumbnail"><img decoding="async" class="lkc-thumbnail-img" src="https://s.wordpress.com/mshots/v1/https%3A%2F%2Fwww.typescriptlang.org%2Fdocs%2Fhandbook%2Futility-types.html%23awaitedtype?w=200" width="100px" height="80px" alt="" /></figure><div class="lkc-title">Documentation - Utility Types</div><div class="lkc-url" title="https://www.typescriptlang.org/docs/handbook/utility-types.html#awaitedtype">https://www.typescriptlang.org/docs/handbook/utility-types.html#awaitedtype</div><div class="lkc-excerpt">Types which are globally included in TypeScript</div></div><div class="clear"></div></div></a></div></div>
<div class="linkcard"><div class="lkc-external-wrap"><a class="lkc-link no_icon" href="https://react.dev/reference/react/useEffect" data-lkc-id="24" target="_blank" rel="external noopener"><div class="lkc-card"><div class="lkc-info"><div class="lkc-favicon"><img decoding="async" src="https://www.google.com/s2/favicons?domain=react.dev" alt="" width="16" height="16" /></div><div class="lkc-domain">react.dev</div></div><div class="lkc-content"><figure class="lkc-thumbnail"><img decoding="async" class="lkc-thumbnail-img" src="//kinonoteblog.com/wp-content/uploads/pz-linkcard/cache/c044e26a0c1ed22f8f141027b5ed65f77c8bcc6500bcd58e4518b065789a13a8.webp" width="100px" height="80px" alt="" /></figure><div class="lkc-title">useEffect – React</div><div class="lkc-url" title="https://react.dev/reference/react/useEffect">https://react.dev/reference/react/useEffect</div><div class="lkc-excerpt">The library for web and native user interfaces</div></div><div class="clear"></div></div></a></div></div>
<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">
うん。まずは、fetchする関数の戻り値に Promise&lt;User&gt; を付けるところから試してみてね</div></div><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のジェネリクスとは？Tの意味と使い方を初心者向けに解説</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>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[<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の <code>&lt;T&gt;</code> って何？ジェネリクスって難しそうで避けてたんだけど…</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 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">
any じゃだめなの？</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>
<h2>TypeScriptのジェネリクスとは？型を引数として受け取る仕組み</h2>
<p><strong>TypeScript ジェネリクスとは、関数や型の定義時には型を決めず、使うときに型を渡せるようにする仕組みです。</strong>型を「引数」のように受け取るため、同じ処理を型ごとに書き直さずに、型安全に使い回せます。</p>
<img decoding="async" src="https://kinonoteblog.com/wp-content/uploads/2026/08/typescript-generics-diagram.webp" alt="TypeScript ジェネリクス（&lt;T&gt;）とは：identity&lt;T&gt;にstring・number・booleanの型を渡して使い回す図" width="1200" height="630" />
<p>関数の引数が「呼び出すときに値を渡す」ものなら、ジェネリクスは「呼び出すときに型を渡す」もの、とイメージすると分かりやすいです。</p>
<div style="overflow-x: auto;">
<table style="border-collapse: collapse; width: 100%;">
<thead>
<tr>
<th style="border: 1px solid #e1e4e8; padding: 0.6em 0.8em; background: #f6f8fa; text-align: left;"></th>
<th style="border: 1px solid #e1e4e8; padding: 0.6em 0.8em; background: #f6f8fa; text-align: left;">普通の引数</th>
<th style="border: 1px solid #e1e4e8; padding: 0.6em 0.8em; background: #f6f8fa; text-align: left;">型引数（ジェネリクス）</th>
</tr>
</thead>
<tbody>
<tr>
<td style="border: 1px solid #e1e4e8; padding: 0.6em 0.8em; vertical-align: top;">渡すもの</td>
<td style="border: 1px solid #e1e4e8; padding: 0.6em 0.8em; vertical-align: top;">値（<code>42</code> など）</td>
<td style="border: 1px solid #e1e4e8; padding: 0.6em 0.8em; vertical-align: top;">型（<code>number</code> など）</td>
</tr>
<tr>
<td style="border: 1px solid #e1e4e8; padding: 0.6em 0.8em; vertical-align: top;">書く場所</td>
<td style="border: 1px solid #e1e4e8; padding: 0.6em 0.8em; vertical-align: top;"><code>( )</code> の中</td>
<td style="border: 1px solid #e1e4e8; padding: 0.6em 0.8em; vertical-align: top;"><code>&lt; &gt;</code> の中</td>
</tr>
<tr>
<td style="border: 1px solid #e1e4e8; padding: 0.6em 0.8em; vertical-align: top;">例</td>
<td style="border: 1px solid #e1e4e8; padding: 0.6em 0.8em; vertical-align: top;"><code>add(1, 2)</code></td>
<td style="border: 1px solid #e1e4e8; padding: 0.6em 0.8em; vertical-align: top;"><code>identity&lt;string&gt;("a")</code></td>
</tr>
</tbody>
</table>
</div>
<h2>ジェネリクスが必要な理由：型ごとに関数を書くと重複する</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 identityString(value: string): string {
  return value;
}
function identityNumber(value: number): number {
  return value;
}</code></pre>
<p>処理は同じなのに、string用・number用と増えていきます。boolean や配列にも対応するたびに関数が増え、修正も全部に必要になります。</p>
<p>では引数と戻り値を <code>any</code> にすればよいかというと、それも問題があります。詳しくは後の「anyとの違い」で見ます。</p>
<h2>基本の書き方：関数名の後ろに &lt;T&gt; を付ける</h2>
<p>ジェネリクスは、関数名の後ろに <code>&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&lt;T&gt;(value: T): T {
  return value;
}

const a = identity&lt;string&gt;("hello"); // string
const b = identity&lt;number&gt;(42);      // number</code></pre>
<ul>
<li><code>&lt;T&gt;</code>：型引数の宣言（Tは「Type」の頭文字で、慣習的によく使われる名前）</li>
<li><code>value: T</code>：引数の型にTを使う</li>
<li><code>): T</code>：戻り値の型にもTを使う</li>
<li><code>identity&lt;string&gt;(...)</code>：呼び出し時に <code>T = string</code> を渡す</li>
</ul>
<p>Tという名前に決まりはなく、<code>&lt;Type&gt;</code> や <code>&lt;Item&gt;</code> のように意味のある名前にしても動きます。慣習として1文字（T, U, K, V）がよく使われます。</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>
<h3>型推論で &lt;T&gt; を省略できる</h3>
<p>引数から型が決まる場合、呼び出し時の <code>&lt;string&gt;</code> は省略できます。TypeScriptが引数の値を見て、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 identity&lt;T&gt;(value: T): T {
  return value;
}
const c = identity("hello"); // string と推論される
const d = identity(42);      // number と推論される</code></pre>
<p>実務では、型推論に任せて省略するのが一般的です。推論がうまくいかないとき（引数がなく戻り値の型でしか決まらない場合など）だけ、<code>&lt;型&gt;</code> を明示します。</p>
<h2>複数の型引数：&lt;K, V&gt; のようにカンマで並べる</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 pair&lt;K, V&gt;(key: K, value: V): [K, V] {
  return [key, value];
}
const p = pair("age", 30); // [string, number]</code></pre>
<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 firstItem&lt;T&gt;(items: T[]): T | undefined {
  return items[0];
}
const n = firstItem([10, 20, 30]);   // number | undefined
const s = firstItem(["a", "b"]);     // string | undefined</code></pre>
<h2>extendsで型引数に制約をつける</h2>
<p>型引数Tは「何でも入る」ため、そのままでは中身のプロパティにアクセスできません。たとえば <code>length</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 getLength&lt;T&gt;(value: T): number {
  return value.length;
}</code></pre>
<p>このエラーは、<code>extends</code> で「Tは少なくとも <code>length</code> を持つ型」という条件を付けると解消できます。これを<strong>ジェネリクスの制約（generic constraints）</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;">function getLength&lt;T extends { length: number }&gt;(value: T): number {
  return value.length;
}
getLength("hello");   // 5
getLength([1, 2, 3]); // 3
getLength(123);</code></pre>
<p>制約を満たさない型（<code>number</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;">// Argument of type 'number' is not assignable to parameter of type '{ length: number; }'.</code></pre>
<p>制約の公式な解説は、TypeScript公式ドキュメントの「Generic Constraints」にあります。</p>
<div class="linkcard"><div class="lkc-external-wrap"><a class="lkc-link no_icon" href="https://www.typescriptlang.org/docs/handbook/2/generics.html" data-lkc-id="25" target="_blank" rel="external noopener"><div class="lkc-card"><div class="lkc-info"><div class="lkc-favicon"><img decoding="async" src="https://www.google.com/s2/favicons?domain=www.typescriptlang.org" alt="" width="16" height="16" /></div><div class="lkc-domain">www.typescriptlang.org</div></div><div class="lkc-content"><figure class="lkc-thumbnail"><img decoding="async" class="lkc-thumbnail-img" src="https://s.wordpress.com/mshots/v1/https%3A%2F%2Fwww.typescriptlang.org%2Fdocs%2Fhandbook%2F2%2Fgenerics.html?w=200" width="100px" height="80px" alt="" /></figure><div class="lkc-title">Documentation - Generics</div><div class="lkc-url" title="https://www.typescriptlang.org/docs/handbook/2/generics.html">https://www.typescriptlang.org/docs/handbook/2/generics.html</div><div class="lkc-excerpt">Types which take parameters</div></div><div class="clear"></div></div></a></div></div>
<h2>ジェネリックな型：type や interface にも使える</h2>
<p>ジェネリクスは関数だけでなく、<code>type</code> や <code>interface</code> にも使えます。API レスポンスのように「形は同じで中身の型だけ違う」データを表すのに便利です。</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 ApiResponse&lt;T&gt; = {
  data: T;
  status: number;
};
type User = { id: number; name: string };

const res: ApiResponse&lt;User&gt; = {
  data: { id: 1, name: "キノ" },
  status: 200,
};
const bad: ApiResponse = { data: 1, status: 200 };</code></pre>
<p><code>ApiResponse&lt;User&gt;</code> のように型引数を渡すと、<code>data</code> の型が <code>User</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;">// Generic type 'ApiResponse' requires 1 type argument(s).</code></pre>
<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の違いは？使い分けを初心者向けに解説</div><div class="lkc-date">&#x1f552;&#xfe0f;2026年7月18日</div><div class="lkc-excerpt">interfaceとtypeって、どっちもオブジェクトの型を書けるけど、何が違うの？実は、普通のオブジェクトならほぼ同じなんだ。違いが出る場面だけ押さえれば迷わなくなるよじゃあ、どんなときに違いが出るの？大きくは2つ。ユニオン型と、同じ名前での定義の追加。順番に見ていこうTypeScriptのinterfaceとtypeの違いとは？結論は2つだけTypeScript の interface と type の違いは、主にユニオン型などを書けるのが type、同じ名前で定義を追加できるのが interface という2点です。オブジェクトの形を表すだけなら、どちらを使ってもほと...</div></div><div class="clear"></div></div></a></div></div>
<h2>anyとジェネリクスの違い：型情報が残るかどうか</h2>
<p><code>any</code> は「型チェックをやめる」型で、ジェネリクスは「型を保ったまま使い回す」仕組みです。まず <code>any</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 identityAny(value: any): any {
  return value;
}
const r = identityAny("hello");
r.toFixed(2); // コンパイルは通るが、実行時にエラーになる</code></pre>
<p>戻り値が <code>any</code> になるため、<code>string</code> を渡したのに <code>toFixed</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&lt;T&gt;(value: T): T {
  return value;
}
const s = identity("hello");
s.toFixed(2);</code></pre>
<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;">// Property 'toFixed' does not exist on type '"hello"'.</code></pre>
<p>ジェネリクスなら、渡した型が戻り値まで引き継がれるため、間違った使い方をコンパイル時に検出できます。</p>
<div style="overflow-x: auto;">
<table style="border-collapse: collapse; width: 100%;">
<thead>
<tr>
<th style="border: 1px solid #e1e4e8; padding: 0.6em 0.8em; background: #f6f8fa; text-align: left;"></th>
<th style="border: 1px solid #e1e4e8; padding: 0.6em 0.8em; background: #f6f8fa; text-align: left;">any</th>
<th style="border: 1px solid #e1e4e8; padding: 0.6em 0.8em; background: #f6f8fa; text-align: left;">ジェネリクス（&lt;T&gt;）</th>
</tr>
</thead>
<tbody>
<tr>
<td style="border: 1px solid #e1e4e8; padding: 0.6em 0.8em; vertical-align: top;">型チェック</td>
<td style="border: 1px solid #e1e4e8; padding: 0.6em 0.8em; vertical-align: top;">実質なし</td>
<td style="border: 1px solid #e1e4e8; padding: 0.6em 0.8em; vertical-align: top;">あり</td>
</tr>
<tr>
<td style="border: 1px solid #e1e4e8; padding: 0.6em 0.8em; vertical-align: top;">戻り値の型</td>
<td style="border: 1px solid #e1e4e8; padding: 0.6em 0.8em; vertical-align: top;">any（情報が消える）</td>
<td style="border: 1px solid #e1e4e8; padding: 0.6em 0.8em; vertical-align: top;">渡した型がそのまま残る</td>
</tr>
<tr>
<td style="border: 1px solid #e1e4e8; padding: 0.6em 0.8em; vertical-align: top;">エディタの補完</td>
<td style="border: 1px solid #e1e4e8; padding: 0.6em 0.8em; vertical-align: top;">効かない</td>
<td style="border: 1px solid #e1e4e8; padding: 0.6em 0.8em; vertical-align: top;">効く</td>
</tr>
<tr>
<td style="border: 1px solid #e1e4e8; padding: 0.6em 0.8em; vertical-align: top;">間違いの検出</td>
<td style="border: 1px solid #e1e4e8; padding: 0.6em 0.8em; vertical-align: top;">実行時</td>
<td style="border: 1px solid #e1e4e8; padding: 0.6em 0.8em; vertical-align: top;">コンパイル時</td>
</tr>
<tr>
<td style="border: 1px solid #e1e4e8; padding: 0.6em 0.8em; vertical-align: top;">向いている場面</td>
<td style="border: 1px solid #e1e4e8; padding: 0.6em 0.8em; vertical-align: top;">型が本当に不明なとき（原則避ける）</td>
<td style="border: 1px solid #e1e4e8; padding: 0.6em 0.8em; vertical-align: top;">型が違うだけで処理が同じとき</td>
</tr>
</tbody>
</table>
</div>
<p>型が分からない値を扱いたい場合は <code>any</code> ではなく <code>unknown</code> を使う方法もあります。違いはこちらで解説しています。</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>実務で見かけるジェネリクス：Array・Promise・useState</h2>
<p>自分でジェネリクスを書く機会が少なくても、<strong>標準の型やライブラリでは日常的に使われています。</strong>代表例を見ておくと、<code>&lt;T&gt;</code> の意味がつかみやすくなります。</p>
<h3>Array&lt;T&gt; と Promise&lt;T&gt;</h3>
<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 nums: Array&lt;number&gt; = [1, 2, 3];
const names: string[] = ["a", "b"];

async function fetchNumber(): Promise&lt;number&gt; {
  return 1;
}</code></pre>
<p><code>number[]</code> は <code>Array&lt;number&gt;</code> の短い書き方です。<code>Promise&lt;number&gt;</code> は「あとで number が返ってくる」という意味で、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">fetchでデータを取ってきたのに、プロパティ名を間違えてて、画面に出すまで気づかなかったよ…あるあるだね。じゃあ聞くけど、API通信の関数に Promise&lt;User&gt; って書くと、何が変わると思う？うーん、User型のデータが返ってくるって分かる、とか？でも、fetchは「あとで」結果が返ってくるんだよね。そんな値にも型を付けられるの？いいところに気づいたね。「あとで返ってくる値」にも型を付けられるし、付けると、さっきのタイプミスも書いている時点で気づけるようになるよえっ、本当に？じゃあ、型を付けないと、どうなっち...</div></div><div class="clear"></div></div></a></div></div>
<h3>ReactのuseState&lt;T&gt;</h3>
<p>Reactの <code>useState</code> も、ジェネリクスで状態の型を指定できます。初期値が <code>null</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;">import { useState } from "react";

type User = { id: number; name: string };

export function Profile() {
  const [user, setUser] = useState&lt;User | null&gt;(null);
  const [count, setCount] = useState(0); // number と推論される
  return (
    &lt;button onClick={() =&gt; setUser({ id: count, name: "キノ" })}&gt;
      {user?.name} &lt;span onClick={() =&gt; setCount(count + 1)}&gt;+&lt;/span&gt;
    &lt;/button&gt;
  );
}</code></pre>
<p>初期値が <code>0</code> のように型が決まる場合は、<code>useState(0)</code> と書けば <code>number</code> と推論されるため、型引数は不要です。</p>
<p>React側の型の付け方は、React公式ドキュメントにもまとまっています。</p>
<div class="linkcard"><div class="lkc-external-wrap"><a class="lkc-link no_icon" href="https://react.dev/learn/typescript" data-lkc-id="26" target="_blank" rel="external noopener"><div class="lkc-card"><div class="lkc-info"><div class="lkc-favicon"><img decoding="async" src="https://www.google.com/s2/favicons?domain=react.dev" alt="" width="16" height="16" /></div><div class="lkc-domain">react.dev</div></div><div class="lkc-content"><figure class="lkc-thumbnail"><img decoding="async" class="lkc-thumbnail-img" src="//kinonoteblog.com/wp-content/uploads/pz-linkcard/cache/4b34679a5e0c2a2da050392867f11993d30d05b42a4202facc5a6917aeab1b41.webp" width="100px" height="80px" alt="" /></figure><div class="lkc-title">Using TypeScript – React</div><div class="lkc-url" title="https://react.dev/learn/typescript">https://react.dev/learn/typescript</div><div class="lkc-excerpt">The library for web and native user interfaces</div></div><div class="clear"></div></div></a></div></div>
<h2>よくあるエラーと対処</h2>
<h3>1. Property &#8216;length&#8217; does not exist on type &#8216;T&#8217;</h3>
<p>Tに何も制約がないのに、プロパティにアクセスしたときのエラーです。<code>extends</code> で必要なプロパティを持つ型に制約すると解消します（前述）。</p>
<h3>2. Generic type &#8216;ApiResponse&#8217; requires 1 type argument(s)</h3>
<p>ジェネリックな型を、型引数なしで使ったときのエラーです。<code>ApiResponse&lt;User&gt;</code> のように型引数を渡してください。</p>
<h3>3. Argument of type &#8216;number&#8217; is not assignable to parameter of type &#8216;{ length: number; }&#8217;</h3>
<p>制約（<code>extends</code>）を満たさない型を渡したときのエラーです。渡している値の型が制約に合っているかを確認します。</p>
<h3>4. .tsxファイルで &lt;T&gt; を使うとエラーになる</h3>
<p>アロー関数のジェネリクス <code>&lt;T&gt;</code> は、.tsxではJSXのタグと見分けがつきません。<code>&lt;T,&gt;</code> のようにカンマを付けるか、<code>&lt;T extends unknown&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;">const identity1 = &lt;T,&gt;(x: T) =&gt; x;
const identity2 = &lt;T extends unknown&gt;(x: T) =&gt; x;</code></pre>
<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">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>よくある質問</h2>
<p><strong>Q. ジェネリクスのTは何の略ですか？</strong><br />
A. 一般にはTypeの頭文字です。名前に決まりはなく、<code>&lt;Item&gt;</code> のように好きな名前にできます。複数あるときはT, U, V や K, V（Key, Value）がよく使われます。</p>
<p><strong>Q. ジェネリクスとanyはどう使い分けますか？</strong><br />
A. 渡した型を戻り値などに引き継ぎたいならジェネリクスを使います。anyは型チェックが外れるため、原則避けるのがおすすめです。</p>
<p><strong>Q. 初心者はジェネリクスをいつ覚えるべきですか？</strong><br />
A. 最初は <code>Array&lt;T&gt;</code>、<code>Promise&lt;T&gt;</code>、<code>useState&lt;T&gt;</code> を「読める」ことを目標にすると十分です。自作するのは、同じ処理を型違いで何度も書きそうになったときで構いません。</p>
<p><strong>Q. 型引数は省略できますか？</strong><br />
A. 引数から型が推論できる場合は省略できます。推論できない場合や、意図した型を明示したい場合に <code>&lt;型&gt;</code> を書きます。</p>
<h2>まとめ：TypeScript ジェネリクスとは何かのおさらい</h2>
<ul>
<li>ジェネリクスは、型を引数のように受け取り、使うときに決める仕組み</li>
<li><code>&lt;T&gt;</code> を関数名や型名の後ろに付けて宣言する。多くの場合は型推論で省略できる</li>
<li><code>extends</code> で型引数に制約をつけると、プロパティにアクセスできる</li>
<li>anyと違い、渡した型が戻り値まで引き継がれ、間違いをコンパイル時に検出できる</li>
<li><code>Array&lt;T&gt;</code>・<code>Promise&lt;T&gt;</code>・<code>useState&lt;T&gt;</code> を読めるようになるのが最初の目標</li>
</ul>
<p>次のステップとして、型の基本や設定を固めておくと、ジェネリクスの理解も早まります。</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>
<div class="linkcard"><div class="lkc-internal-wrap"><a class="lkc-link no_icon" href="https://kinonoteblog.com/programming/typescript-tsconfig-beginner" data-lkc-id="19"><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.のコピーのコピーのコピーのコピーのコピー-3-150x150.webp" width="100px" height="80px" alt="" /></figure><div class="lkc-title">tsconfig.jsonとは？初期設定の作り方を初心者向けに解説</div><div class="lkc-date">&#x1f552;&#xfe0f;2026年8月9日</div><div class="lkc-excerpt">tsc index.ts でコンパイルはできたけど、tsconfig.json ってファイルもよく見かけるよね。あれは何なの？プロジェクトのコンパイル設定をまとめておくファイルだよ。なくても動くけど、あると毎回の手間がなくなるんだ設定ってたくさんありそうで、どれを触ればいいか分からない…最初に押さえるのは4つだけ。順番に見ていこうtsconfig.jsonとは？コンパイル設定をまとめるファイルtsconfig.jsonとは、TypeScriptのコンパイル方法を、プロジェクト単位でまとめて設定するファイルです。どのファイルをコンパイルするか、どのJavaScript...</div></div><div class="clear"></div></div></a></div></div>
<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">
<code>&lt;T&gt;</code> は「型を渡す引数」って考えればいいんだね。思ったよりシンプルかも</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">
そう。まずは Array&lt;T&gt; や Promise&lt;T&gt; が読めれば十分。自分で書くのはその後で大丈夫だよ</div></div><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の違いは？使い分けを初心者向けに解説</div><div class="lkc-date">&#x1f552;&#xfe0f;2026年7月18日</div><div class="lkc-excerpt">interfaceとtypeって、どっちもオブジェクトの型を書けるけど、何が違うの？実は、普通のオブジェクトならほぼ同じなんだ。違いが出る場面だけ押さえれば迷わなくなるよじゃあ、どんなときに違いが出るの？大きくは2つ。ユニオン型と、同じ名前での定義の追加。順番に見ていこうTypeScriptのinterfaceとtypeの違いとは？結論は2つだけTypeScript の interface と type の違いは、主にユニオン型などを書けるのが type、同じ名前で定義を追加できるのが interface という2点です。オブジェクトの形を表すだけなら、どちらを使ってもほと...</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>
