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
jsが型安全になったっていい
Search
Natsuki
November 15, 2024
0
56
jsが型安全になったっていい
TypeScript Meet Up #4 - TSKaigi Kansai 前夜
https://kobets.connpass.com/event/328535/
Natsuki
November 15, 2024
Tweet
Share
More Decks by Natsuki
See All by Natsuki
PHPStanをチームに内緒で開発に取り入れる方法
natsukiengr
0
650
Featured
See All Featured
RailsConf 2023
tenderlove
29
940
Gamification - CAS2011
davidbonilla
80
5.1k
Dealing with People You Can't Stand - Big Design 2015
cassininazir
365
25k
Chrome DevTools: State of the Union 2024 - Debugging React & Beyond
addyosmani
2
170
Put a Button on it: Removing Barriers to Going Fast.
kastner
59
3.6k
Designing on Purpose - Digital PM Summit 2013
jponch
116
7k
Designing for humans not robots
tammielis
250
25k
jQuery: Nuts, Bolts and Bling
dougneiner
61
7.5k
For a Future-Friendly Web
brad_frost
175
9.4k
A Tale of Four Properties
chriscoyier
157
23k
The Myth of the Modular Monolith - Day 2 Keynote - Rails World 2024
eileencodes
17
2.3k
Testing 201, or: Great Expectations
jmmastey
40
7.1k
Transcript
jsが型安全になったっていい Natsuki
自己紹介 Natsuki 普段はLaravel + Vueで開発
自己紹介 Natsuki 普段はLaravel + Vueで開発 Vue Fes Japan 2024
JSDocで型注釈 JSDocとは JavaDocやPHPDocのようなコメント内の注釈から ドキュメントを生成するツール または、そのコメント自体 https://jsdoc.app/
JSDocで型注釈 JSDocとは JavaDocやPHPDocのようなコメント内の注釈から ドキュメントを生成するツール または、そのコメント自体 https://jsdoc.app/ /** @type {number} */
const = 0; i
JSDocで型注釈 JSDocとは JavaDocやPHPDocのようなコメント内の注釈から ドキュメントを生成するツール または、そのコメント自体 https://jsdoc.app/ @type などのタグで型情報を書くことができ、tscもこの型情報を参照して型チェ ックを行ってくれる /**
@type {number} */ const = 0; i ` `
JSDocで型注釈 JSDocとは JavaDocやPHPDocのようなコメント内の注釈から ドキュメントを生成するツール または、そのコメント自体 https://jsdoc.app/ @type などのタグで型情報を書くことができ、tscもこの型情報を参照して型チェ ックを行ってくれる これとtsconfig.jsonとtscで型チェックを行うことができる
/** @type {number} */ const = 0; i ` `
なぜtsファイルじゃないのか
なぜtsファイルじゃないのか 既存プロダクトをtsに移行したいけど、テストコードも無いしエン バグが怖い トランスパイルの時間をゼロにしたい とかとか
JSDoc(+tsc)でできること 1. 型注釈の記述 // index.ts function hello(name: string) { //
... } const LIMIT = { min: 0, max: 1000, } as const
JSDoc(+tsc)でできること 1. 型注釈の記述 // index.ts function hello(name: string) { //
... } const LIMIT = { min: 0, max: 1000, } as const // index.js /** * @param {string} name */ function hello(name) { // ... } const LIMIT = /** @type {const} */ { min: 0, max: 100, }
JSDoc(+tsc)でできること 2. 型の定義 // index.ts interface User<T> { name: string
age: number customData: T }
JSDoc(+tsc)でできること 2. 型の定義 // index.js /** * @extends T *
@typedef {{ * name: string * age: number * customData: T * }} User */ // index.ts interface User<T> { name: string age: number customData: T }
JSDoc(+tsc)でできること 3. 型のインポート・エクスポート // index.js /** * @import { User
} './index.ts' */
JSDocでできないこと 1. 条件型(Conditional Types)
JSDocでできないこと 1. 条件型(Conditional Types) type IsNumber<T> = T extends number
? true : false; type T1 = IsNumber<10>;
JSDocでできないこと 1. 条件型(Conditional Types) 型定義だけ、`.d.ts`に書けば解決 type IsNumber<T> = T extends
number ? true : false; type T1 = IsNumber<10>;
JSDocでできないこと 2. TypeScript独自の実装 Enumとかdeclareとか
JSDocでできないこと 2. TypeScript独自の実装 Enumとかdeclareとか
JSDocでできないこと 2. TypeScript独自の実装 Enumとかdeclareとか 一応`@enum`はあるが、ただの連想配列なので、TSのように値からアクセスできない
JSDocでできないこと 3. tsファイルでの型補完 JSDocの型はtsファイル内では無視される
JSDocでできないこと 3. tsファイルでの型補完 JSDocの型はtsファイル内では無視される /** * @param {string} name */
function (name) { // ... } hello Parameter 'name' implicitly has an 'any' type.
JSDocを使う上での注意
JSDocを使う上での注意 「tsファイルよりJSDocの方がオススメ!」というわけではない 単純に書く文字数が増えるので、通常のWebアプリケーションの開発にはオス スメしない
JSDocを使う上での注意 「tsファイルよりJSDocの方がオススメ!」というわけではない 単純に書く文字数が増えるので、通常のWebアプリケーションの開発にはオス スメしない tsファイルへの移行は楽じゃない JSDocはtsファイルに書いても型注釈として解釈されないので、書き直す必要 がある
JSDocを使う上での注意 「tsファイルよりJSDocの方がオススメ!」というわけではない 単純に書く文字数が増えるので、通常のWebアプリケーションの開発にはオス スメしない tsファイルへの移行は楽じゃない JSDocはtsファイルに書いても型注釈として解釈されないので、書き直す必要 がある その他使いたいエコシステムが対応してないことも
おわり