Slide 1

Slide 1 text

jsが型安全になったっていい Natsuki

Slide 2

Slide 2 text

自己紹介 Natsuki 普段はLaravel + Vueで開発

Slide 3

Slide 3 text

自己紹介 Natsuki 普段はLaravel + Vueで開発 Vue Fes Japan 2024

Slide 4

Slide 4 text

JSDocで型注釈 JSDocとは JavaDocやPHPDocのようなコメント内の注釈から ドキュメントを生成するツール または、そのコメント自体 https://jsdoc.app/

Slide 5

Slide 5 text

JSDocで型注釈 JSDocとは JavaDocやPHPDocのようなコメント内の注釈から ドキュメントを生成するツール または、そのコメント自体 https://jsdoc.app/ /** @type {number} */ const = 0; i

Slide 6

Slide 6 text

JSDocで型注釈 JSDocとは JavaDocやPHPDocのようなコメント内の注釈から ドキュメントを生成するツール または、そのコメント自体 https://jsdoc.app/ @type などのタグで型情報を書くことができ、tscもこの型情報を参照して型チェ ックを行ってくれる /** @type {number} */ const = 0; i ` `

Slide 7

Slide 7 text

JSDocで型注釈 JSDocとは JavaDocやPHPDocのようなコメント内の注釈から ドキュメントを生成するツール または、そのコメント自体 https://jsdoc.app/ @type などのタグで型情報を書くことができ、tscもこの型情報を参照して型チェ ックを行ってくれる これとtsconfig.jsonとtscで型チェックを行うことができる /** @type {number} */ const = 0; i ` `

Slide 8

Slide 8 text

なぜtsファイルじゃないのか

Slide 9

Slide 9 text

なぜtsファイルじゃないのか 既存プロダクトをtsに移行したいけど、テストコードも無いしエン バグが怖い トランスパイルの時間をゼロにしたい とかとか

Slide 10

Slide 10 text

JSDoc(+tsc)でできること 1. 型注釈の記述 // index.ts function hello(name: string) { // ... } const LIMIT = { min: 0, max: 1000, } as const

Slide 11

Slide 11 text

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, }

Slide 12

Slide 12 text

JSDoc(+tsc)でできること 2. 型の定義 // index.ts interface User { name: string age: number customData: T }

Slide 13

Slide 13 text

JSDoc(+tsc)でできること 2. 型の定義 // index.js /** * @extends T * @typedef {{ * name: string * age: number * customData: T * }} User */ // index.ts interface User { name: string age: number customData: T }

Slide 14

Slide 14 text

JSDoc(+tsc)でできること 3. 型のインポート・エクスポート // index.js /** * @import { User } './index.ts' */

Slide 15

Slide 15 text

JSDocでできないこと 1. 条件型(Conditional Types)

Slide 16

Slide 16 text

JSDocでできないこと 1. 条件型(Conditional Types) type IsNumber = T extends number ? true : false; type T1 = IsNumber<10>;

Slide 17

Slide 17 text

JSDocでできないこと 1. 条件型(Conditional Types) 型定義だけ、`.d.ts`に書けば解決 type IsNumber = T extends number ? true : false; type T1 = IsNumber<10>;

Slide 18

Slide 18 text

JSDocでできないこと 2. TypeScript独自の実装 Enumとかdeclareとか

Slide 19

Slide 19 text

JSDocでできないこと 2. TypeScript独自の実装 Enumとかdeclareとか

Slide 20

Slide 20 text

JSDocでできないこと 2. TypeScript独自の実装 Enumとかdeclareとか 一応`@enum`はあるが、ただの連想配列なので、TSのように値からアクセスできない

Slide 21

Slide 21 text

JSDocでできないこと 3. tsファイルでの型補完 JSDocの型はtsファイル内では無視される

Slide 22

Slide 22 text

JSDocでできないこと 3. tsファイルでの型補完 JSDocの型はtsファイル内では無視される /** * @param {string} name */ function (name) { // ... } hello Parameter 'name' implicitly has an 'any' type.

Slide 23

Slide 23 text

JSDocを使う上での注意

Slide 24

Slide 24 text

JSDocを使う上での注意 「tsファイルよりJSDocの方がオススメ!」というわけではない 単純に書く文字数が増えるので、通常のWebアプリケーションの開発にはオス スメしない

Slide 25

Slide 25 text

JSDocを使う上での注意 「tsファイルよりJSDocの方がオススメ!」というわけではない 単純に書く文字数が増えるので、通常のWebアプリケーションの開発にはオス スメしない tsファイルへの移行は楽じゃない JSDocはtsファイルに書いても型注釈として解釈されないので、書き直す必要 がある

Slide 26

Slide 26 text

JSDocを使う上での注意 「tsファイルよりJSDocの方がオススメ!」というわけではない 単純に書く文字数が増えるので、通常のWebアプリケーションの開発にはオス スメしない tsファイルへの移行は楽じゃない JSDocはtsファイルに書いても型注釈として解釈されないので、書き直す必要 がある その他使いたいエコシステムが対応してないことも

Slide 27

Slide 27 text

おわり