Skip to content

Commit 3f17b67

Browse files
committed
全てのheadlingにidを設定
1 parent d747214 commit 3f17b67

7 files changed

+98
-99
lines changed

articles/definition-file.re

+28-28
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
#@# REVIEW muo: 6章けっこう長めなので章として切断できないかな。
44
#@# REVIEW muo: 基礎編・応用編と分けるのはむずかしいかもしれないけど、「このへんまで頑張ったら一息つける」「ここまでやってくれる人はほめてあげよう」ぐらいに分かれていると、トピック拾いやすいかもしらん
55

6-
== JavaScriptの資産が使いたい
6+
=={use-js-assets} JavaScriptの資産が使いたい
77

88
TypeScriptJavaScriptの上位互換であり、JavaScriptを置き換えるものです。
99
とはいえ、現時点ではWebアプリの世界はJavaScriptで成り立っていますし、すでに莫大な資産があります。
@@ -20,7 +20,7 @@ TypeScriptでは、JavaScriptの自由奔放(かつ、危険がてんこ盛り
2020
そこのところを十分に気をつけないといけません。
2121

2222
#@# @suppress ParagraphNumber SectionLength
23-
== @typesを使う
23+
=={use-at-types} @typesを使う
2424

2525
さて、まずは自分で型定義ファイルを作るよりも、既存のものを使ってみましょう。
2626
jQueryやlodashなどの有名どころはひととおり揃っています。
@@ -88,7 +88,7 @@ DefinitelyTypedは規模は大きくなっていくもののアクティブに
8888

8989
===[/column]
9090

91-
== 型定義ファイルを参照してみよう
91+
=={use-definition-files} 型定義ファイルを参照してみよう
9292

9393
型定義ファイルを参照するには、tscコマンドでコンパイルするときにコンパイル対象に含める必要があります。
9494
node_modules/@types にある型定義ファイルは特別扱いされ、モジュールをimportした時や、tsconfig.jsonのtypesに記述したモジュールの解決時に自動的に走査されます。
@@ -224,7 +224,7 @@ power-assertはテストコード中でimportしますが、テストランナ
224224
あわせて型定義ファイルへの参照が意図どおり処理されずに困った場合のデバッグ方法を紹介しておきます。
225225
コンパイルに利用したファイルをリスト表示する@<code>{--listFiles}オプションと、型定義ファイルを見つけるためにコンパイラがどういう探索を行ったかを表示する@<code>{--traceResolution}オプションを試してみてください。
226226

227-
== 型定義ファイルを書こう
227+
=={writing-dts-files} 型定義ファイルを書こう
228228

229229
さて型定義ファイルの取得方法、使い方はわかりました。
230230
しかし、世の中にあるJavaScriptライブラリのうち、型定義ファイルが書かれていないものはまだまだ数多くあります。
@@ -239,7 +239,7 @@ power-assertはテストコード中でimportしますが、テストランナ
239239

240240
//footnote[types-savannah][DefinitelyTypedメンテナ(=筆者)の意見です]
241241

242-
=== 型、実体、そして42
242+
==={types-and-values} 型、実体、そして42
243243

244244
TypeScriptJavaScriptに対して後付で型による制約を付け足した言語です。
245245
そのため、JavaC#のような最初から型ありきの言語より少し考え方が複雑です。
@@ -254,7 +254,7 @@ TypeScriptはJavaScriptに対して後付で型による制約を付け足した
254254
そのため、型と実体が分離してしまい、この2つの間に乖離が生じると(つまりバグると)コンパイルが通るのに実行時エラーが多発する、というありさまになるわけです。
255255
型定義ファイルを書いて"この変数は、あります!"と宣言したけれど、実際には存在せず実行時エラーになるというのは広く使われている型定義ファイルですらままある話です。
256256

257-
=== 良い型定義ファイル、悪い型定義ファイル
257+
==={good-definitions-bad-definitions} 良い型定義ファイル、悪い型定義ファイル
258258

259259
型定義ファイルにも良し悪しがあります。
260260
その基準は至って簡単です。
@@ -282,7 +282,7 @@ DefinitelyTypedにpull requestを送ってくれる人にもそういう人は
282282
これから説明するベストプラクティスを踏まえて、より良い型定義ファイルを作成できるように鍛錬していきましょう。
283283

284284
#@# @suppress ParagraphNumber SectionLength
285-
== 型定義ファイルを書くための心得
285+
=={writing-instruction} 型定義ファイルを書くための心得
286286

287287
#@# @suppress SentenceLength JapaneseStyle
288288
型定義ファイルを書く上でのベストプラクティスを解説していきます。
@@ -292,7 +292,7 @@ DefinitelyTypedにpull requestを送ってくれる人にもそういう人は
292292
//footnote[official-handbook][@<href>{http://www.typescriptlang.org/docs/handbook/writing-declaration-files.html}]
293293
//footnote[dt-best-practice][@<href>{http://definitelytyped.org/guides/best-practices.html}]
294294

295-
=== テキトーに、やろー!
295+
==={silly-go-luck} テキトーに、やろー!
296296

297297
一番最初にコレを書くのもどうかと思うのですが、まずは"使える"ようにするのが一番大切です。
298298

@@ -319,7 +319,7 @@ TypeScriptを書き始めの頃は、品質を気にした所で後々粗が見
319319
//footnote[atom-dts][なお筆者はGitHubの作っているエディタ、Atomの型定義ファイルを3日かけて書いたことがあります。アレがジゴクだ]
320320

321321
#@# @suppress InvalidExpression
322-
==== 最高に雑な型定義ファイルを作る
322+
===={done-is-better-than-perfect} 最高に雑な型定義ファイルを作る
323323

324324
テキトーにやるためにまずは最高に雑な、とりあえず動く型定義ファイルを作ってみます(@<list>{wildcard/basic-invalid.d.ts})。
325325
モジュール名しか指定しなかったり、anyな変数を用意したりしてコンパイルエラーを回避します。
@@ -379,7 +379,7 @@ anyばっかりですね。
379379
しかし、コンパイルはとおります。
380380

381381
#@# @suppress ParagraphNumber SectionLength
382-
=== インタフェースを活用する
382+
==={interface-the-best-friend} インタフェースを活用する
383383

384384
#@# @suppress SentenceLength ParenthesizedSentence
385385
インタフェースは大変使いやすいパーツです。
@@ -444,7 +444,7 @@ console.log(str.trimStart());
444444
//footnote[string-trimStart][@<href>{https://github.com/sebmarkbage/ecmascript-string-left-right-trim}]
445445
//footnote[tc39-proposal][@<href>{https://tc39.github.io/process-document/}]
446446

447-
=== 幽霊namespace
447+
==={ghost-namespace} 幽霊namespace
448448

449449
幽霊namespace@<fn>{ghost-module}という考え方があります。
450450

@@ -589,7 +589,7 @@ declare var $: jquery.Static;
589589
//footnote[ghost-module][TypeScriptリファレンスでは非インスタンス化モジュールという名前で紹介しました。その後、DefinitelyTypedのbest practicesでghost moduleと表記された]
590590

591591
#@# @suppress JapaneseStyle ParagraphNumber SectionLength
592-
=== なんでもかんでもインタフェースにしてはならない
592+
==={interface-is-not-duct-tape} なんでもかんでもインタフェースにしてはならない
593593

594594
少し前の文章であんだけインタフェースを持ち上げといてこれかぁ!?
595595
と思われたかもしれませんが、なんでもかんでも乱用すればいいってものではありません。
@@ -746,7 +746,7 @@ var test;
746746

747747
//footnote[power-assert-dts][@<href>{https://github.com/DefinitelyTyped/DefinitelyTyped/blob/master/power-assert/}]
748748

749-
=== クラスはクラスとして定義する
749+
==={class-definitions} クラスはクラスとして定義する
750750

751751
クラスを型定義として起こす方法について解説します。
752752
歴史的経緯により、TypeScriptではクラスの型定義を行う時に2つの代表的なやり方が存在しています。
@@ -829,7 +829,7 @@ export { }
829829

830830
#@# OK REVIEW lc: s/以下のような分/以下のような文/
831831

832-
=== オーバーロードを上手く使おう!
832+
==={pretty-good-overload} オーバーロードを上手く使おう!
833833

834834
#@# @suppress JapaneseAmbiguousNounConjunction
835835
正しいライブラリの使い方を導くこと。
@@ -914,7 +914,7 @@ funcB(obj);
914914
//footnote[issue5766][@<href>{https://github.com/Microsoft/TypeScript/issues/5766}]
915915

916916
#@# @suppress SectionLength JapaneseAmbiguousNounConjunction
917-
=== モジュールの定義の統合
917+
==={module-declaration-merging} モジュールの定義の統合
918918

919919
#@# OK REVIEW lc: なんか「ベストプラクティス」からずれている気がする・・・
920920
#@# vv: 心得に変えました
@@ -952,7 +952,7 @@ DefinitelyTypedではモジュールの型定義の外側にnamespaceを使っ
952952
モジュールを利用しないnamespaceだけの構成です。
953953
たとえば、lodashやjQueryのようなグローバルな名前空間に変数を生やすような場合に、いまだに有効です。
954954

955-
=== anyと{}とObject
955+
==={any-vs-object} anyと{}とObject
956956

957957
もしも型定義ファイルを書いていて具体的な型がわからないとき、頭を使わずにとりあえずコンパイルを通したいときは、素直に@<code>{any}を使いましょう。
958958
こういったシチュエーションで、稀にObjectを指定する人がいます。
@@ -971,7 +971,7 @@ DefinitelyTypedではモジュールの型定義の外側にnamespaceを使っ
971971
#@# @suppress SuccessiveWord
972972
そしてanyを使うことに気後れするのであれば、よくよく調べて適切な型定義を与えるようにしましょう。
973973

974-
=== ドキュメントから書き起こす
974+
==={scratch-from-document} ドキュメントから書き起こす
975975

976976
もしライブラリにしっかりしたドキュメントがあるのであれば、実装コードから型定義ファイルを起こすのではなく、ドキュメントをベースに作成しましょう。
977977
Visual StudioなどのIDEでは、型定義ファイル上に書かれたJSDocコメントも利用時に表示してくれる場合があります。
@@ -989,7 +989,7 @@ Visual StudioなどのIDEでは、型定義ファイル上に書かれたJSDoc
989989
そのため、もしjQueryのドキュメント自体が間違っている場合はjQueryのドキュメントを直すところから始めるとよいでしょう。
990990
コントリビュートの輪!
991991

992-
=== コールバック関数の引数を無闇に省略可能(optional)にしない
992+
==={be-careful-about-optional} コールバック関数の引数を無闇に省略可能(optional)にしない
993993

994994
optionalとは、値が渡されるかどうかの指標であって、コールバックを受け取った側が使うかどうかではありません。
995995
ここを勘違いすると、"コールバックに値が渡されるが別に使わなくてもいいよ"マークとしてoptionalを使ってしまうのです。
@@ -1041,7 +1041,7 @@ dataがundefinedかもしれないため、if文などで中身をチェック
10411041
間違えないよう、留意しましょう。
10421042

10431043
#@# @suppress SectionLength ParagraphNumber
1044-
=== インタフェースのプリフィクスとしてIをつけるのはやめよう!
1044+
==={dont-use-i-prefix} インタフェースのプリフィクスとしてIをつけるのはやめよう!
10451045

10461046
TypeScriptの公式ドキュメントで@<href>{https://www.typescriptlang.org/docs/handbook/writing-declaration-files.html#naming-conventions,明記}@<fn>{writing-dts-files}されました。
10471047

@@ -1053,7 +1053,7 @@ C#やJavaよりも、広い範囲でインタフェースが利用されるの
10531053

10541054
//footnote[writing-dts-files][@<href>{https://www.typescriptlang.org/docs/handbook/writing-declaration-files.html#naming-conventions}]
10551055

1056-
=== ECMAScript 2015CommonJSでのモジュールの互換性について
1056+
==={module-compat} ECMAScript 2015CommonJSでのモジュールの互換性について
10571057

10581058
最初にまとめを書いておきます。
10591059
まとめ:@<strong>{元のJavaScriptコード中にdefaultの文字がないならimportのdefaultは使うな}。
@@ -1234,7 +1234,7 @@ TypeScriptでは@<code>{exports.default = ...}とされているコードのみ@
12341234

12351235
//footnote[node-module-url][@<href>{https://github.com/nodejs/node/blob/v6.3.1/lib/internal/bootstrap_node.js#L434-L441}]
12361236

1237-
=== CommonJS形式でちょっと小難しいexport句の使い方
1237+
==={export-and-commonjs} CommonJS形式でちょっと小難しいexport句の使い方
12381238

12391239
インタフェースやクラスのインスタンス単体をモジュールの外側に見せたい場合、@<list>{export/sample1.d.ts}のように書きます。
12401240

@@ -1283,7 +1283,7 @@ declare module "buzz" {
12831283
型定義ファイルを書いたら適当なユースケースに当てはめて意図どおりコンパイルできるか確かめてみましょう。
12841284

12851285
#@# @suppress SectionLength ParagraphNumber
1286-
=== グローバルに展開される型定義とモジュールの両立
1286+
==={modules-and-global} グローバルに展開される型定義とモジュールの両立
12871287

12881288
#@# OK REVIEW lc: これも「ベストプラクティス」からずれている気がする・・・
12891289
#@# vv: 心得 に名称変えました
@@ -1440,7 +1440,7 @@ randomizeString("TypeScript", {
14401440

14411441
//footnote[umd][@<href>{https://github.com/umdjs/umd}]
14421442

1443-
=== 最終チェック!
1443+
==={check-at-last} 最終チェック!
14441444

14451445
#@# OK REVIEW lc: もはや「型定義ファイルのベストプラクティス」節であることを忘れている気がする
14461446
#@# vv: 心得に変えました
@@ -1450,7 +1450,7 @@ randomizeString("TypeScript", {
14501450
それが、--noImplicitAnyや--strictNullChecksをつけての試しコンパイルとtslintによるチェックです。
14511451

14521452
#@# @suppress SectionLength
1453-
==== tslint
1453+
===={tslint} tslint
14541454

14551455
lintという種類のプログラムがあります。
14561456
ざっくり、プログラムを静的に解析してバグになりそうな箇所や悪いコードスタイルを見つけてくるツールを指します。
@@ -1469,7 +1469,7 @@ tslintは設定ファイルを必要とします。
14691469
//footnote[tslint-example-config][@<href>{https://github.com/palantir/tslint/blob/master/tslint.json}]
14701470
//footnote[tsc-tslint][@<href>{https://github.com/Microsoft/TypeScript/blob/master/tslint.json}]
14711471

1472-
== Let's contribute!
1472+
=={lets-contribute} Let's contribute!
14731473

14741474
ようこそ!@<href>{https://github.com/DefinitelyTyped/DefinitelyTyped,DefinitelyTyped}@<fn>{dt}へ!
14751475
メンテナのvvakameです。
@@ -1495,7 +1495,7 @@ DefinitelyTypedはGitHub上のリポジトリなので追加、修正につい
14951495
//footnote[dt][@<href>{https://github.com/DefinitelyTyped/DefinitelyTyped}]
14961496
//footnote[dt-contrib-guide][@<href>{http://definitelytyped.org/guides/contributing.html}]
14971497

1498-
=== 新規型定義ファイルの追加のレビューの観点
1498+
==={review-about-new-definitions} 新規型定義ファイルの追加のレビューの観点
14991499

15001500
まずは今までなかった、新しいライブラリに対する型定義ファイルのレビューの観点を解説していきます。
15011501

@@ -1522,7 +1522,7 @@ npmに公開されているライブラリはnpmで公開されている名前
15221522
なおレビュワー次第ですがJSDocがきっちり書かれているか、というのを見る人もいます。
15231523
きちんとドキュメントから転記などしてあるものが送られてきたときはやはり感心しますね。
15241524

1525-
=== 既存型定義ファイルの修正のレビューの観点
1525+
==={review-about-improvements} 既存型定義ファイルの修正のレビューの観点
15261526

15271527
1. CIが通っているか
15281528
2. 破壊的変更が含まれていないか
@@ -1548,7 +1548,7 @@ npmに公開されているライブラリはnpmで公開されている名前
15481548

15491549
では、皆様のpull request、お待ちしています!
15501550

1551-
== 自分のライブラリをnpmで公開するときのベストプラクティス
1551+
=={publish-npm-best-practice} 自分のライブラリをnpmで公開するときのベストプラクティス
15521552

15531553
自分の作ったライブラリをnpmに公開する時のベストプラクティスについて説明します。
15541554
ここで説明するのはTypeScriptによってコードが書かれているライブラリを前提とします。

articles/index.re

+5-5
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
={index} Revised 型の国のTypeScript
22

3-
== 本書について
3+
=={about-this-book} 本書について
44

55
#@# prh:disable
66
本書はC87で頒布した『型の国のTypeScript』の改訂(C90)版です。
@@ -26,7 +26,7 @@ C87版から上手に味わいを引き継いだ可愛い表紙をありがと
2626
//footnote[wonderland][@<href>{http://typescript.ninja/typescript-in-definitelyland/}]
2727
//footnote[issues][@<href>{https://github.com/typescript-ninja/typescript-in-definitelyland/issues}]
2828

29-
== 対象読者
29+
=={main-target} 対象読者
3030

3131
本書はECMAScript 2015について理解しているユーザを対象にしています。
3232
@<kw>{OOP,Object Oriented Programming}についても効能や利点をある程度理解していることが望ましいです。
@@ -43,7 +43,7 @@ Version 2.0.0
4343

4444
//footnote[js-primer][@<href>{https://github.com/asciidwango/js-primer}]
4545

46-
== 本書の内容
46+
=={tour-of-this-book} 本書の内容
4747

4848
本書は@<code>{--noImplicitAny}、@<code>{--strictNullChecks}、@<code>{--noImplicitReturns}、@<code>{--noImplicitThis}を有効にした状態を基本として解説します。
4949
各オプションの詳細については@<chapref>{tsc-options}を参照してください。
@@ -75,7 +75,7 @@ TypeScriptはJSXのサポートを含みますが、筆者が今のところJSX
7575
//footnote[webpack][@<href>{https://webpack.github.io/}]
7676
//footnote[jsx][@<href>{http://www.typescriptlang.org/docs/handbook/jsx.html}]
7777

78-
== なぜTypeScriptを選ぶべきなのか
78+
=={why-typescript} なぜTypeScriptを選ぶべきなのか
7979

8080
TypeScriptはMicrosoftが主導となって開発している言語で、ECMAScript(JavaScript)に静的な型付けによる検証を導入したものです。
8181
現実を見据えた言語仕様で、"未来のJavaScriptそのもの"になることを目指しています。
@@ -95,7 +95,7 @@ with構文やtry-catch構文などは、TypeScript的に使いにくい仕様に
9595

9696
//footnote[jonathandturner-left][過去にTypesの正式な仕様化について@<href>{https://github.com/rwaldron/tc39-notes/blob/master/es6/2014-09/sept-25.md#types,TC39ミーティングで話された}ことがあったがJonathan TurnerがMicrosoftを離れたため以後の進捗はよくない]
9797

98-
== TypeScriptを選んだ時のデメリット
98+
=={disclaimer} TypeScriptを選んだ時のデメリット
9999

100100
一番大きなデメリットは学習コストが追加で発生します。
101101
JavaScriptの書き方に加え、TypeScriptで型注釈を与える記法を学ばねばなりません。

0 commit comments

Comments
 (0)