3
3
#@# REVIEW muo: 6 章けっこう長めなので章として切断できないかな。
4
4
#@# REVIEW muo: 基礎編・応用編と分けるのはむずかしいかもしれないけど、「このへんまで頑張ったら一息つける」「ここまでやってくれる人はほめてあげよう」ぐらいに分かれていると、トピック拾いやすいかもしらん
5
5
6
- == JavaScript の資産が使いたい
6
+ == {use - js - assets} JavaScript の資産が使いたい
7
7
8
8
TypeScript はJavaScript の上位互換であり、JavaScript を置き換えるものです。
9
9
とはいえ、現時点ではWeb アプリの世界はJavaScript で成り立っていますし、すでに莫大な資産があります。
@@ -20,7 +20,7 @@ TypeScriptでは、JavaScriptの自由奔放(かつ、危険がてんこ盛り
20
20
そこのところを十分に気をつけないといけません。
21
21
22
22
#@# @ suppress ParagraphNumber SectionLength
23
- == @ typesを使う
23
+ == {use - at - types} @ typesを使う
24
24
25
25
さて、まずは自分で型定義ファイルを作るよりも、既存のものを使ってみましょう。
26
26
jQueryやlodashなどの有名どころはひととおり揃っています。
@@ -88,7 +88,7 @@ DefinitelyTypedは規模は大きくなっていくもののアクティブに
88
88
89
89
=== [ / column]
90
90
91
- == 型定義ファイルを参照してみよう
91
+ == {use - definition - files} 型定義ファイルを参照してみよう
92
92
93
93
型定義ファイルを参照するには、tscコマンドでコンパイルするときにコンパイル対象に含める必要があります。
94
94
node_modules/@ types にある型定義ファイルは特別扱いされ、モジュールをimportした時や、tsconfig. jsonのtypesに記述したモジュールの解決時に自動的に走査されます。
@@ -224,7 +224,7 @@ power-assertはテストコード中でimportしますが、テストランナ
224
224
あわせて型定義ファイルへの参照が意図どおり処理されずに困った場合のデバッグ方法を紹介しておきます。
225
225
コンパイルに利用したファイルをリスト表示する@< code> {-- listFiles}オプションと、型定義ファイルを見つけるためにコンパイラがどういう探索を行ったかを表示する@< code> {-- traceResolution}オプションを試してみてください。
226
226
227
- == 型定義ファイルを書こう
227
+ == {writing - dts - files} 型定義ファイルを書こう
228
228
229
229
さて型定義ファイルの取得方法、使い方はわかりました。
230
230
しかし、世の中にあるJavaScript ライブラリのうち、型定義ファイルが書かれていないものはまだまだ数多くあります。
@@ -239,7 +239,7 @@ power-assertはテストコード中でimportしますが、テストランナ
239
239
240
240
// footnote[types-savannah][DefinitelyTypedメンテナ(=筆者)の意見です]
241
241
242
- === 型、実体、そして42 。
242
+ === {types - and - values} 型、実体、そして42 。
243
243
244
244
TypeScript はJavaScript に対して後付で型による制約を付け足した言語です。
245
245
そのため、Java やC # のような最初から型ありきの言語より少し考え方が複雑です。
@@ -254,7 +254,7 @@ TypeScriptはJavaScriptに対して後付で型による制約を付け足した
254
254
そのため、型と実体が分離してしまい、この2 つの間に乖離が生じると(つまりバグると)コンパイルが通るのに実行時エラーが多発する、というありさまになるわけです。
255
255
型定義ファイルを書いて"この変数は、あります!" と宣言したけれど、実際には存在せず実行時エラーになるというのは広く使われている型定義ファイルですらままある話です。
256
256
257
- === 良い型定義ファイル、悪い型定義ファイル
257
+ === {good - definitions - bad - definitions} 良い型定義ファイル、悪い型定義ファイル
258
258
259
259
型定義ファイルにも良し悪しがあります。
260
260
その基準は至って簡単です。
@@ -282,7 +282,7 @@ DefinitelyTypedにpull requestを送ってくれる人にもそういう人は
282
282
これから説明するベストプラクティスを踏まえて、より良い型定義ファイルを作成できるように鍛錬していきましょう。
283
283
284
284
#@# @ suppress ParagraphNumber SectionLength
285
- == 型定義ファイルを書くための心得
285
+ == {writing - instruction} 型定義ファイルを書くための心得
286
286
287
287
#@# @ suppress SentenceLength JapaneseStyle
288
288
型定義ファイルを書く上でのベストプラクティスを解説していきます。
@@ -292,7 +292,7 @@ DefinitelyTypedにpull requestを送ってくれる人にもそういう人は
292
292
// footnote[official-handbook][@<href>{http://www.typescriptlang.org/docs/handbook/writing-declaration-files.html}]
293
293
// footnote[dt-best-practice][@<href>{http://definitelytyped.org/guides/best-practices.html}]
294
294
295
- === テキトーに、やろー!
295
+ === {silly - go - luck} テキトーに、やろー!
296
296
297
297
一番最初にコレを書くのもどうかと思うのですが、まずは"使える" ようにするのが一番大切です。
298
298
@@ -319,7 +319,7 @@ TypeScriptを書き始めの頃は、品質を気にした所で後々粗が見
319
319
// footnote[atom-dts][なお筆者はGitHubの作っているエディタ、Atomの型定義ファイルを3日かけて書いたことがあります。アレがジゴクだ]
320
320
321
321
#@# @ suppress InvalidExpression
322
- ==== 最高に雑な型定義ファイルを作る
322
+ ==== {done - is - better - than - perfect} 最高に雑な型定義ファイルを作る
323
323
324
324
テキトーにやるためにまずは最高に雑な、とりあえず動く型定義ファイルを作ってみます(@< list> {wildcard/ basic- invalid. d. ts})。
325
325
モジュール名しか指定しなかったり、anyな変数を用意したりしてコンパイルエラーを回避します。
@@ -379,7 +379,7 @@ anyばっかりですね。
379
379
しかし、コンパイルはとおります。
380
380
381
381
#@# @ suppress ParagraphNumber SectionLength
382
- === インタフェースを活用する
382
+ === {interface - the - best - friend} インタフェースを活用する
383
383
384
384
#@# @ suppress SentenceLength ParenthesizedSentence
385
385
インタフェースは大変使いやすいパーツです。
@@ -444,7 +444,7 @@ console.log(str.trimStart());
444
444
// footnote[string-trimStart][@<href>{https://github.com/sebmarkbage/ecmascript-string-left-right-trim}]
445
445
// footnote[tc39-proposal][@<href>{https://tc39.github.io/process-document/}]
446
446
447
- === 幽霊namespace
447
+ === {ghost - namespace} 幽霊namespace
448
448
449
449
幽霊namespace@< fn> {ghost- module}という考え方があります。
450
450
@@ -589,7 +589,7 @@ declare var $: jquery.Static;
589
589
// footnote[ghost-module][TypeScriptリファレンスでは非インスタンス化モジュールという名前で紹介しました。その後、DefinitelyTypedのbest practicesでghost moduleと表記された]
590
590
591
591
#@# @ suppress JapaneseStyle ParagraphNumber SectionLength
592
- === なんでもかんでもインタフェースにしてはならない
592
+ === {interface - is - not - duct - tape} なんでもかんでもインタフェースにしてはならない
593
593
594
594
少し前の文章であんだけインタフェースを持ち上げといてこれかぁ!?
595
595
と思われたかもしれませんが、なんでもかんでも乱用すればいいってものではありません。
@@ -746,7 +746,7 @@ var test;
746
746
747
747
// footnote[power-assert-dts][@<href>{https://github.com/DefinitelyTyped/DefinitelyTyped/blob/master/power-assert/}]
748
748
749
- === クラスはクラスとして定義する
749
+ === {class - definitions} クラスはクラスとして定義する
750
750
751
751
クラスを型定義として起こす方法について解説します。
752
752
歴史的経緯により、TypeScript ではクラスの型定義を行う時に2 つの代表的なやり方が存在しています。
@@ -829,7 +829,7 @@ export { }
829
829
830
830
#@# OK REVIEW lc: s/ 以下のような分/ 以下のような文/
831
831
832
- === オーバーロードを上手く使おう!
832
+ === {pretty - good - overload} オーバーロードを上手く使おう!
833
833
834
834
#@# @ suppress JapaneseAmbiguousNounConjunction
835
835
正しいライブラリの使い方を導くこと。
@@ -914,7 +914,7 @@ funcB(obj);
914
914
// footnote[issue5766][@<href>{https://github.com/Microsoft/TypeScript/issues/5766}]
915
915
916
916
#@# @ suppress SectionLength JapaneseAmbiguousNounConjunction
917
- === モジュールの定義の統合
917
+ === {module - declaration - merging} モジュールの定義の統合
918
918
919
919
#@# OK REVIEW lc: なんか「ベストプラクティス」からずれている気がする・・・
920
920
#@# vv: 心得に変えました
@@ -952,7 +952,7 @@ DefinitelyTypedではモジュールの型定義の外側にnamespaceを使っ
952
952
モジュールを利用しないnamespaceだけの構成です。
953
953
たとえば、lodashやjQueryのようなグローバルな名前空間に変数を生やすような場合に、いまだに有効です。
954
954
955
- === anyと{}とObject
955
+ === {any - vs - object} anyと{}とObject
956
956
957
957
もしも型定義ファイルを書いていて具体的な型がわからないとき、頭を使わずにとりあえずコンパイルを通したいときは、素直に@< code> {any}を使いましょう。
958
958
こういったシチュエーションで、稀にObject を指定する人がいます。
@@ -971,7 +971,7 @@ DefinitelyTypedではモジュールの型定義の外側にnamespaceを使っ
971
971
#@# @ suppress SuccessiveWord
972
972
そしてanyを使うことに気後れするのであれば、よくよく調べて適切な型定義を与えるようにしましょう。
973
973
974
- === ドキュメントから書き起こす
974
+ === {scratch - from - document} ドキュメントから書き起こす
975
975
976
976
もしライブラリにしっかりしたドキュメントがあるのであれば、実装コードから型定義ファイルを起こすのではなく、ドキュメントをベースに作成しましょう。
977
977
Visual Studio などのIDE では、型定義ファイル上に書かれたJSDoc コメントも利用時に表示してくれる場合があります。
@@ -989,7 +989,7 @@ Visual StudioなどのIDEでは、型定義ファイル上に書かれたJSDoc
989
989
そのため、もしjQueryのドキュメント自体が間違っている場合はjQueryのドキュメントを直すところから始めるとよいでしょう。
990
990
コントリビュートの輪!
991
991
992
- === コールバック関数の引数を無闇に省略可能(optional)にしない
992
+ === {be - careful - about - optional} コールバック関数の引数を無闇に省略可能(optional)にしない
993
993
994
994
optionalとは、値が渡されるかどうかの指標であって、コールバックを受け取った側が使うかどうかではありません。
995
995
ここを勘違いすると、"コールバックに値が渡されるが別に使わなくてもいいよ" マークとしてoptionalを使ってしまうのです。
@@ -1041,7 +1041,7 @@ dataがundefinedかもしれないため、if文などで中身をチェック
1041
1041
間違えないよう、留意しましょう。
1042
1042
1043
1043
#@# @suppress SectionLength ParagraphNumber
1044
- === インタフェースのプリフィクスとしてI をつけるのはやめよう!
1044
+ ==={dont - use - i - prefix} インタフェースのプリフィクスとしてI をつけるのはやめよう!
1045
1045
1046
1046
とTypeScript の公式ドキュメントで@<href>{https: // www.typescriptlang.org/docs/handbook/writing-declaration-files.html#naming-conventions,明記}@<fn>{writing-dts-files}されました。
1047
1047
@@ -1053,7 +1053,7 @@ C#やJavaよりも、広い範囲でインタフェースが利用されるの
1053
1053
1054
1054
// footnote[writing-dts-files][@<href>{https://www.typescriptlang.org/docs/handbook/writing-declaration-files.html#naming-conventions}]
1055
1055
1056
- === ECMAScript 2015 とCommonJS でのモジュールの互換性について
1056
+ === {module - compat} ECMAScript 2015 とCommonJS でのモジュールの互換性について
1057
1057
1058
1058
最初にまとめを書いておきます。
1059
1059
まとめ:@< strong> {元のJavaScript コード中にdefaultの文字がないならimportのdefaultは使うな}。
@@ -1234,7 +1234,7 @@ TypeScriptでは@<code>{exports.default = ...}とされているコードのみ@
1234
1234
1235
1235
// footnote[node-module-url][@<href>{https://github.com/nodejs/node/blob/v6.3.1/lib/internal/bootstrap_node.js#L434-L441}]
1236
1236
1237
- === CommonJS 形式でちょっと小難しいexport句の使い方
1237
+ === {export - and - commonjs} CommonJS 形式でちょっと小難しいexport句の使い方
1238
1238
1239
1239
インタフェースやクラスのインスタンス単体をモジュールの外側に見せたい場合、@< list> {export/ sample1. d. ts}のように書きます。
1240
1240
@@ -1283,7 +1283,7 @@ declare module "buzz" {
1283
1283
型定義ファイルを書いたら適当なユースケースに当てはめて意図どおりコンパイルできるか確かめてみましょう。
1284
1284
1285
1285
#@# @ suppress SectionLength ParagraphNumber
1286
- === グローバルに展開される型定義とモジュールの両立
1286
+ === {modules - and - global} グローバルに展開される型定義とモジュールの両立
1287
1287
1288
1288
#@# OK REVIEW lc: これも「ベストプラクティス」からずれている気がする・・・
1289
1289
#@# vv: 心得 に名称変えました
@@ -1440,7 +1440,7 @@ randomizeString("TypeScript", {
1440
1440
1441
1441
// footnote[umd][@<href>{https://github.com/umdjs/umd}]
1442
1442
1443
- === 最終チェック!
1443
+ === {check - at - last} 最終チェック!
1444
1444
1445
1445
#@# OK REVIEW lc: もはや「型定義ファイルのベストプラクティス」節であることを忘れている気がする
1446
1446
#@# vv: 心得に変えました
@@ -1450,7 +1450,7 @@ randomizeString("TypeScript", {
1450
1450
それが、-- noImplicitAnyや-- strictNullChecksをつけての試しコンパイルとtslintによるチェックです。
1451
1451
1452
1452
#@# @ suppress SectionLength
1453
- ==== tslint
1453
+ ==== {tslint} tslint
1454
1454
1455
1455
lintという種類のプログラムがあります。
1456
1456
ざっくり、プログラムを静的に解析してバグになりそうな箇所や悪いコードスタイルを見つけてくるツールを指します。
@@ -1469,7 +1469,7 @@ tslintは設定ファイルを必要とします。
1469
1469
// footnote[tslint-example-config][@<href>{https://github.com/palantir/tslint/blob/master/tslint.json}]
1470
1470
// footnote[tsc-tslint][@<href>{https://github.com/Microsoft/TypeScript/blob/master/tslint.json}]
1471
1471
1472
- == Let 's contribute!
1472
+ == {lets - contribute} Let 's contribute!
1473
1473
1474
1474
ようこそ!@< href> {https: // github.com/DefinitelyTyped/DefinitelyTyped,DefinitelyTyped}@<fn>{dt}へ!
1475
1475
メンテナのvvakameです。
@@ -1495,7 +1495,7 @@ DefinitelyTypedはGitHub上のリポジトリなので追加、修正につい
1495
1495
// footnote[dt][@<href>{https://github.com/DefinitelyTyped/DefinitelyTyped}]
1496
1496
// footnote[dt-contrib-guide][@<href>{http://definitelytyped.org/guides/contributing.html}]
1497
1497
1498
- === 新規型定義ファイルの追加のレビューの観点
1498
+ === {review - about - new - definitions} 新規型定義ファイルの追加のレビューの観点
1499
1499
1500
1500
まずは今までなかった、新しいライブラリに対する型定義ファイルのレビューの観点を解説していきます。
1501
1501
@@ -1522,7 +1522,7 @@ npmに公開されているライブラリはnpmで公開されている名前
1522
1522
なおレビュワー次第ですがJSDocがきっちり書かれているか、というのを見る人もいます。
1523
1523
きちんとドキュメントから転記などしてあるものが送られてきたときはやはり感心しますね。
1524
1524
1525
- === 既存型定義ファイルの修正のレビューの観点
1525
+ ==={review-about-improvements} 既存型定義ファイルの修正のレビューの観点
1526
1526
1527
1527
1 . CI が通っているか
1528
1528
2 . 破壊的変更が含まれていないか
@@ -1548,7 +1548,7 @@ npmに公開されているライブラリはnpmで公開されている名前
1548
1548
1549
1549
では、皆様のpull request、お待ちしています!
1550
1550
1551
- == 自分のライブラリをnpmで公開するときのベストプラクティス
1551
+ == {publish - npm - best - practice} 自分のライブラリをnpmで公開するときのベストプラクティス
1552
1552
1553
1553
自分の作ったライブラリをnpmに公開する時のベストプラクティスについて説明します。
1554
1554
ここで説明するのはTypeScript によってコードが書かれているライブラリを前提とします。
0 commit comments