Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
一か月半かけて、TypeScript本を写経した話
Search
ツノ
November 15, 2022
Programming
0
800
一か月半かけて、TypeScript本を写経した話
ツノ
November 15, 2022
Tweet
Share
More Decks by ツノ
See All by ツノ
エンジニア達の_完全に理解した_-コードでの契約ってなんだ_.pdf
2nofa11
1
160
Vite完全に理解した その1
2nofa11
2
250
年末年始に「chibivue」で Vueヂカラをつけた
2nofa11
0
270
「世界一流のエンジニアの思考法」 を完全に理解した
2nofa11
1
260
書籍「プログラマー脳」を完全に理解した
2nofa11
0
62
VuexからPinia移行に向けて
2nofa11
0
420
VueTestUtilbrのキホンの『キ』
2nofa11
0
150
Other Decks in Programming
See All in Programming
[SF Ruby Conf 2025] Rails X
palkan
0
350
オフライン対応!Flutterアプリに全文検索エンジンを実装する @FlutterKaigi2025
itsmedreamwalker
2
270
AI 時代だからこそ抑えたい「価値のある」PHP ユニットテストを書く技術 #phpconfuk / phpcon-fukuoka-2025
shogogg
1
580
AIと協働し、イベントソーシングとアクターモデルで作る後悔しないアーキテクチャ Regret-Free Architecture with AI, Event Sourcing, and Actors
tomohisa
2
8.6k
OSS開発者の憂鬱
yusukebe
12
6.1k
JJUG CCC 2025 Fall: Virtual Thread Deep Dive
ternbusty
3
480
Developing Specifications - Jakarta EE: a Real World Example
ivargrimstad
0
190
CSC509 Lecture 13
javiergs
PRO
0
260
Web エンジニアが JavaScript で AI Agent を作る / JSConf JP 2025 sponsor session
izumin5210
4
2k
関数の挙動書き換える
takatofukui
4
750
AIを駆使して新しい技術を効率的に理解する方法
nogu66
1
660
Module Harmony
petamoriken
2
550
Featured
See All Featured
Fashionably flexible responsive web design (full day workshop)
malarkey
407
66k
Dealing with People You Can't Stand - Big Design 2015
cassininazir
367
27k
A Modern Web Designer's Workflow
chriscoyier
697
190k
Why Our Code Smells
bkeepers
PRO
340
57k
The Invisible Side of Design
smashingmag
302
51k
The MySQL Ecosystem @ GitHub 2015
samlambert
251
13k
Docker and Python
trallard
46
3.7k
Optimizing for Happiness
mojombo
379
70k
How to train your dragon (web standard)
notwaldorf
97
6.4k
RailsConf 2023
tenderlove
30
1.3k
Code Review Best Practice
trishagee
72
19k
Practical Orchestrator
shlominoach
190
11k
Transcript
一か月半かけて、 TS 本を写経した話 ツノ:@2nofa11
質問 どうやって開発言語の習得していますか?
「技術書」の読書術では プログラミング学習は以下の 3 つを意識する あくまで「手段」、「目的」を持つ 複数言語を習得する 動くものを作り、自分の手で確かめる
やったこと TypeScript を習得することを目的 「プロを目指す人のための TypeScript 入門」
具体的な写経内容 1. GitHub 上に Repository を作る 2. 書いてあるコードを黙々と写経&コミット コミットメッセージ:p•• 気になったとことをメモ
3. 書いたコードで気になったところは、 console.log で途中結果を出す
ルール 毎日 1 コミット以上 どんなに自明な内容でコーディングする
写経達成! 成果 ① 内容 ① 成果 ② 内容 ② 期間
9/28 ~ コミット 245 コミット ページ数 375 ページ ステップ数 1994 行 今年のコミット履歴
学んだこと例1-1 JavaScript の知識を学習(復習)することができた 分割代入(パターン = 式) ⇒ 実装できるレベルまで理解することができた const {
foo, bar } = obj; // objのプロパティを変数に const { num, obj: { bar }, } = obj; // objのプロパティがネストしていても分割代入可能 const arr = [1, 2, 3]; const { first, second, third } = arr; // 配列を変数に
学んだこと例1-2 非同期処理 ⇒Promise 文がスラスラ読めるようになった (前までは Promise チェーンへの理解が浅かった) const p =
readFile("foo.txt", "utf-8") .then(() => sleepReject(1000)) .then( (result) => { console.log("OK"); }, (error) => { console.log("E",error); );
学んだこと例2 TypeScript が「型安全である」ということが腑に落ちた! 写経前 文字列型や数値型があるから、JavaScript より安全...? 写経後 型レベルの算術やリテラル型&タプル型を駆使すると、 大規模開発でもコードの揺れがなくなる! TypeScript
の解像度を上げることができた
学んだこと例3-1 TypeScript の便利な機能を学ぶことができた 関数型の部分型関係 ⇒ 型安全かつ、自由度の高い設計が可能になる type HasNameAndAge = {
name: string; age: number; }; // S type HasName = { name: string; }; // T const fromAge = (): HasNameAndAge => ({ name: "John", age }); // 戻り値:S const f: () => HasName = fromAge; //SはTの部分型のため、戻り値TをSとみなせる
学んだこと例3-2 ジェネリクスと型引数 ⇒ 汎用性の高い関数が作成可能になる const generics = () => {
function repeat<T>(element: T, length: number): T[] { const result: T[] = []; for (let i = 0; i < length; i++) { result.push(element); } return result; } console.log(repeat<string>("a", 5)); // 文字列型でも使用可能 console.log(repeat<number>(0, 5)); // 数値型でも使用可能 };
課題 本の写経だけでは、100%理解はできない 現場のリアルなコードとは違う
学習方法自体の振り返り 登山のような達成感がある 正直、効率は悪い (自明でもコーディングする) でも、新たな発見があったりする (!!式 の仕組み等) 1 行 1
行の意味を理解して書いたのに、 忘れている部分も多数出てきている
EOL