スタイルガイド(コーディング規約)
非公式のTypeScriptスタイルガイド
スタイルガイドについて意見を求められることはよくあります。個人的には、私は自分のチームやプロジェクトにコーディングスタイルをあまり強制してはいませんが、コードに一貫性が必要だと思う人がいるような状況において、基準として以下で述べるようなスタイルガイドがあることが役に立つのは確かです。個人的にはスタイルよりもはるかに強い意見を持っている観点があり、それについてはヒントの章で説明しています(例えば、型アサーションはよくない、プロパティーsetterはよくない、など)🌹
主要セクション:
変数と関数
変数と関数名には
camelCase
を使います
理由:従来のJavaScript
悪い
良い
クラス
クラス名には
PascalCase
を使います。
理由:これは実際には標準のJavaScriptではかなり一般的です。
悪い
良い
クラスメンバとメソッドの
camelCase
を使う
理由:当然のことながら、変数と関数の命名規則に従います。
悪い
良い
インターフェース
名前には
PascalCase
を使います。
理由:クラスに似ています
メンバには
camelCase
を使います。
理由:クラスに似ています
プレフィックスに
I
をつけないでください
Reason: 慣例的ではないため。
lib.d.ts
はI
のない重要なインターフェース(例えば、Window、Documentなど)を定義します。
悪い
良い
タイプ
名前には
PascalCase
を使います。
理由:クラスに似ています
メンバには
camelCase
を使います。
理由:クラスに似ています
名前空間
名前に
PascalCase
を使用する
理由:TypeScriptチームに続くコンベンション。名前空間は事実上静的メンバを持つクラスです。クラス名は
PascalCase
=>名前空間名はPascalCase
です
悪い
良い
Enum
enum名には
PascalCase
を使います
理由:クラスに似ています。タイプです。
悪い
良い
enumメンバに
PascalCase
を使用する
理由:言語作成者、TypeScriptチームに従った慣例です。例えば
SyntaxKind.StringLiteral
です。他の言語からTypeScriptへの翻訳(コード生成)にも役立ちます。
悪い
良い
null
vs undefined
null
vs undefined
明示的に使用不可能にするために、どちらも使用しないことを推奨します。
理由:これらの値は、値間の一貫した構造を維持するためによく使用されます。TypeScriptでは型を使用して構造を表します
悪い
良い
一般的に
undefined
を使用してください(代わりに{valid:boolean,value?:Foo}
のようなオブジェクトを返すことを検討してください)
悪い
良い
APIまたは従来のAPIの一部である場合は
null
を使用します
理由:Node.jsの慣例通りです。NodeBackスタイルコールバックの
error
はnull
です。
悪い
良い
_truthy_を使用すると、オブジェクトが
null
またはundefined
であるかどうかをチェックできます。
悪い
良い
== null
/!= null
(===
/!==
ではない)を使い、プリミティブにnull
/undefined
をチェックします。これはnull
/undefined
の両方に働きますが、他の_falsy_値(例:''
,0
,false
など)では機能しません。
悪い
良い
フォーマット
TypeScriptコンパイラには、非常に優れた言語フォーマットのサービスが付属しています。デフォルトで出力される出力は、チームの認知負荷を軽減するのに十分です。
コマンドラインでコードを自動的にフォーマットするには、 tsfmt
を使います。また、あなたのIDE(atom/ vscode/vs/sublime)には、すでにフォーマットのサポートが組み込まれています。
例:
引用符
エスケープしない限り、シングルクォート(
'
)を使用することをお勧めします。
理由:他のJavaScriptチームがこれを行っています(airbnb、標準、npm、NodeJS、google/angular、facebook/react)。入力が簡単です(ほとんどのキーボードでシフトが必要ありません)。Prettierチームもシングルクォートを勧めています
ダブルクォートはメリットがないわけではありません: オブジェクトをJSONに簡単にコピーできます。ユーザーが他の言語を使用して、引用文字を変更せずに作業できるようにします。たとえばアポストロフィを使用できます。例えば、
He's not going.
。しかし、私は、JSコミュニティが公正に決定したものから逸脱することはありません。
ダブルクォートを使用できない場合は、バックティック(`)を使用してみてください。
理由:これらは一般に、十分複雑な文字列の意図を表しています。
スペース
2
つのスペースを使います。タブではありません。
理由:他のJavaScriptチームがこれを行っています(airbnb、idiomatic、標準、npm、node、google/angular、facebook/reactを参照してください)。 TypeScript/VSCodeチームは4つのスペースを使用しますが、間違いなくエコシステムの例外です。
セミコロン
セミコロンを使用してください。
理由:明示的なセミコロンは、言語書式設定ツールで一貫した結果を得るのに役立ちます。Missing ASI(Automatic semicolon insertion: 自動セミコロン挿入)は、例えば
foo() \n (function(){})
を単一の文(2つではなく)と間違えます。TC39でも同様に勧められています。
配列
配列に
foos: Array<Foo>
の代わりにfoos: Foo[]
として配列にアノテーションをつけます。
理由:読みやすい。TypeScriptチームによって使用されています。脳が
[]
を検出するように訓練されているので、何かが配列であることを知りやすくなります。
ファイル名
camelCase
を使ってファイルに名前を付けます。例えばaccordion.tsx
、myControl.tsx
、utils.ts
、map.ts
などです。
理由:多くのJSチームで慣習的です。
type
vs interface
type
vs interface
ユニオン型や交差型が必要な場合には
type
を使います:
extend
やimplements
をしたいときはinterface
を使います。
そうでなければ、その日あなたを幸せにするものを使用してください。
==
or ===
==
or ===
どちらもTypeScriptユーザーにとってほとんど安全です。私はTypeScriptのコードベースで使われている===
を使用しています。
最終更新