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
480
一か月半かけて、TypeScript本を写経した話
ツノ
November 15, 2022
Tweet
Share
More Decks by ツノ
See All by ツノ
年末年始に「chibivue」で Vueヂカラをつけた
2nofa11
0
220
「世界一流のエンジニアの思考法」 を完全に理解した
2nofa11
1
120
書籍「プログラマー脳」を完全に理解した
2nofa11
0
27
VuexからPinia移行に向けて
2nofa11
0
260
VueTestUtilbrのキホンの『キ』
2nofa11
0
110
Other Decks in Programming
See All in Programming
Rails と人魚の話/rails-and-mermaid
sanfrecce_osaka
0
100
Elm Form Validation
bkuhlmann
0
510
Behind VS Code Extensions for JavaScript / TypeScript Linnting and Formatting
unvalley
5
890
今、知っておきたい! 生成AIエージェントの世界
elith
3
350
R言語の環境構築と基礎 Tokyo.R 112
bob3bob3
0
260
try! Swift Tokyo 初参加報告LT
hinakko2
0
220
雑に思考を整理する技術と効能
konifar
58
29k
Semantic search with Django and pgvector
pauloxnet
0
240
"config" ってなんだ? / What is "config"?
okashoi
0
240
ScalarDBを用いたマイクロサービスにおけるデータ管理 (Database Engineering Meetup #2)
scalar
0
110
Snowflakeで眠ったデータを起こそう!
estie
0
110
SwiftUIで使いやすいToastの作り方 / How to build a Toast system which is easy to use in SwiftUI
lovee
3
130
Featured
See All Featured
Raft: Consensus for Rubyists
vanstee
132
6.3k
How GitHub Uses GitHub to Build GitHub
holman
468
290k
Making the Leap to Tech Lead
cromwellryan
124
8.5k
Building a Modern Day E-commerce SEO Strategy
aleyda
17
6.4k
Bootstrapping a Software Product
garrettdimon
PRO
302
110k
Design and Strategy: How to Deal with People Who Don’t "Get" Design
morganepeng
116
18k
The Brand Is Dead. Long Live the Brand.
mthomps
49
28k
What’s in a name? Adding method to the madness
productmarketing
PRO
16
2.6k
Visualization
eitanlees
136
14k
Build The Right Thing And Hit Your Dates
maggiecrowley
24
2k
GraphQLとの向き合い方2022年版
quramy
32
12k
Exploring the Power of Turbo Streams & Action Cable | RailsConf2023
kevinliebholz
2
3.4k
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