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
Prettier の TypeScript 3.7 対応について
Search
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
sosukesuzuki
October 29, 2019
Programming
0
450
Prettier の TypeScript 3.7 対応について
2019年10月29日の nihonbashi.js での登壇です。
10月上旬に公開された TypeScript 3.7 のベータ版の Prettier のサポート状況についてお話しました。
sosukesuzuki
October 29, 2019
Tweet
Share
More Decks by sosukesuzuki
See All by sosukesuzuki
JavaScriptにおけるasync/await呼び出しのスタックトレースの困難と実装
sosukesuzuki
12
8.8k
一人で大規模OSSに立ち向かうには
sosukesuzuki
21
13k
デザインシステムと生成AIの相性について考える
sosukesuzuki
4
1.5k
イテレータとイテラブルの概要と課題、未来
sosukesuzuki
5
3.9k
JavaScriptCoreのObject.groupBy/Map.groupByのバグを自分で報告して自分で直す
sosukesuzuki
1
690
「書いたJavaScriptがそのままブラウザで動く未来へ」スピーカーノート
sosukesuzuki
8
12k
Prettier 3.0 の VSCode 拡張対応における技術的な意思決定~VSCode 拡張で dynamic import が動かない~
sosukesuzuki
1
2.1k
ESM移行は無理だけどおれもSindreのライブラリが使いたい!
sosukesuzuki
2
1.3k
JavaScript エコシステムを維持する OSS の努力と課題
sosukesuzuki
14
10k
Other Decks in Programming
See All in Programming
Angular-Apps smarter machen mit Gen AI: Lokal und offlinefähig - Hands-on Workshop!
christianliebel
PRO
0
110
How to stabilize UI tests using XCTest
akkeylab
0
130
最初からAWS CDKで技術検証してもいいんじゃない?
akihisaikeda
4
150
LangChain4jとは一味違うLangChain4j-CDI
kazumura
1
190
生成 AI 時代のスナップショットテストってやつを見せてあげますよ(α版)
ojun9
0
150
コーディングルールの鮮度を保ちたい / keep-fresh-go-internal-conventions
handlename
0
200
ベクトル検索のフィルタを用いた機械学習モデルとの統合 / python-meetup-fukuoka-06-vector-attr
monochromegane
2
440
Codexに役割を持たせる 他のAIエージェントと組み合わせる実務Tips
o8n
4
1.3k
Codex の「自走力」を高める
yorifuji
0
1.2k
S3ストレージクラスの「見える」「ある」「使える」は全部違う ─ 体験から見た、仕様の深淵を覗く
ya_ma23
0
560
Claude Codeログ基盤の構築
giginet
PRO
7
3.3k
守る「だけ」の優しいEMを抜けて、 事業とチームを両方見る視点を身につけた話
maroon8021
3
960
Featured
See All Featured
Building a Scalable Design System with Sketch
lauravandoore
463
34k
Docker and Python
trallard
47
3.8k
SEO Brein meetup: CTRL+C is not how to scale international SEO
lindahogenes
1
2.4k
SEOcharity - Dark patterns in SEO and UX: How to avoid them and build a more ethical web
sarafernandez
0
150
The AI Revolution Will Not Be Monopolized: How open-source beats economies of scale, even for LLMs
inesmontani
PRO
3
3.1k
From Legacy to Launchpad: Building Startup-Ready Communities
dugsong
0
180
The Hidden Cost of Media on the Web [PixelPalooza 2025]
tammyeverts
2
250
Fantastic passwords and where to find them - at NoRuKo
philnash
52
3.6k
HU Berlin: Industrial-Strength Natural Language Processing with spaCy and Prodigy
inesmontani
PRO
0
260
Mind Mapping
helmedeiros
PRO
1
120
Building Applications with DynamoDB
mza
96
7k
Writing Fast Ruby
sferik
630
63k
Transcript
Prettier の TypeScript 3.7 対応について nihonbashi.js 2019/10/29
自己紹介 - 鈴木颯介(Suzuki Sosuke) - GitHub(@sosukesuzuki) - Twitter(@__sosukesuzuki) - Prettier
メンテナ - 筑波大学情報科学類
None
Prettier とは
Prettier - JavaScriptで書かれたコードフォーマッター - JS / TS / HTML /
CSS / YAML / GraphQL などに 対応
フォーマット
TypeScript 3.7 とは
TypeScript 3.7 - 10月に入ってベータ版が公開されたまだ正式リリースされてない最新版の TypeScript - 4つの新構文が追加される - (このLTではこれらの機能自体には詳しく触れません) -
https://devblogs.microsoft.com/typescript/announcing-typescript-3-7-beta/
TypeScript 3.7 - Optional Chaining - 現在 ECMAScript Stage 3
のプロポーザル - Babel にはすでに入っている
TypeScript 3.7 - Nullish Coalescing Operator - 現在 ECMAScript Stage
3 のプロポーザル - Babel にはすでに入っている
TypeScript 3.7 - Assertion Functions - 型に関する機能なので ECMAScript のプロポーザルとかではない -
返り値に `asserts hoge is string` みたいなのを書いて型のアサートができる
TypeScript 3.7 - Class field “declare” keyword - ベータ版のアナウンスには含まれていなかった -
class field の declare キーワードをつけられる
これらに対して Prettier 側が すべき対応は大きく分けて2つ
①依存しているパーサーの更新
Prettier のしくみ(めっちゃ簡潔に) もとのテキスト AST(抽象構文木) フォーマットされたテ キスト パース プリント
Prettier は外部のパーサーを使っている - TS: typescript-eslint/typescript-estree - JS: babel/parser - まずパーサー側が対応するのを待つ必要がある
パーサー側の TS 3.7 対応が終わったら 依存しているバージョンをあげる
②プリントの処理を書く
ASTから実際にコードを フォーマットする処理を書く (このLTではここの詳細には触れません)
雑に一部抜粋(do 式と break のフォーマット)
プリントの処理を書くのは(比較的)簡単 - もともと Babel の Optional Chaining と Nullish Coalescing
には対応していた - Assertion Functions も class フィールドの declare キーワードも似たような構文が あったのでそんなに考えることはなさそうだった
今回困難だったのは 「①依存しているパーサーの更新」
Node バージョン問題
Prettier のサポートしている Node のバージョン - GitHub からの直接インストール - package.json に
“prettier/prettier” を指定することでインストールできる - これは 1.18.2 では Node 6 までサポートしている - バージョン指定してインストール(トランスパイル済み) - 1.18.2 現在で Node 4 までサポートしている
typescript-estree の対応 Node バージョン - "^8.10.0 || ^10.13.0 || >=11.10.1"
Node 6 はサポートされてない (個人的にはそろそろ Prettier が Node 6 のサポートを切るべきだと思いますが)
普通に更新してみたら Node 6 で テストコケた!
切りたいけどメジャーバージョンを あげないと Node 6 のサポートを切れない!
大きく分けて2つの対策が考えられる
① babel-ts パーサーの導入
babel-ts パーサー - Babel の TypeScript パーサーを使おうという話 - TS 3.7
が公開される前から babel-ts パーサーを入れる PR は出ていた - Babel にはもともと Optional Chaining と Nullish Coalescing は入っているのでい けるのでは? - (1.19には入らなさそう) - Assertion Functions と class フィールドの declare キーワードはまだ babel/parser が対応してないので使えない - なのであくまで回避策
② typescript-estree をなんとかする
案1: フォークしてNode6をサポートする - typescript-estree を Prettier 側でフォークして Node 6 をサポートできるように修
正して使おうという案 - 「メンテコストがしんどそう...」「もしやるなら 2.0 のリリースを急がないと...」
案2: GitHub インストールの Node 6 をドロップする - GitHub からの直接インストールの Node
6 をドロップする - バージョン指定インストールの場合トランスパイルして Node 6 をサポートし続けら れる - 「メジャーバージョンあげずに Node 6 を切っていいの?Semver は?」
案2について 「よく考えたら GitHub から直接 インストールするものに対しては我々は Semver を約束してない」
バージョン指定してインストールする ものに関してはトランスパイルして Node 6 をサポートするので Semver は守れる
投票の結果...
レビューを経て...
Merged!!
1.19.0 に入ります (今も多分 prettier/prettier でインストールすれば使えます)