TypeScript Deep Dive 日本語版
  • TypeScript Deep Dive 日本語版
  • TypeScript入門 & 環境構築
    • なぜTypeScriptを使うのか?
  • JavaScript
    • 等価演算子の同一性
    • リファレンス
    • nullとundefined
    • this
    • クロージャ
    • Number型
    • Truthy
  • モダンなJavaScriptの機能
    • クラス
      • Classes Emit
    • アロー関数
    • 残余引数(Restパラメータ)
    • let
    • const
    • 分割代入
    • スプレッド演算子
    • for...of
    • Iterator
    • テンプレートリテラル
    • Promise
    • ジェネレータ
    • async await
  • プロジェクトの環境設定
    • コンパイルコンテキスト
      • tsconfig.json
      • コンパイル対象ファイルの設定
    • 宣言空間
    • ファイルモジュール
      • ファイルモジュールの詳細
      • global.d.ts
    • 名前空間
    • 動的インポート
  • Node.js & TypeScriptのプロジェクト作成
  • React & TypeScriptのプロジェクト作成
  • TypeScriptの型システム
    • JavaScriptからの移行ガイド
    • @types パッケージ (DefinitelyTyped)
    • アンビエント宣言(declare)
      • 型定義ファイル
      • グローバル変数の宣言
    • インターフェース
    • Enum
    • lib.d.ts
    • 関数の型
    • 呼び出し可能オブジェクト
    • Type Assertion(型アサーション)
    • Freshness
    • 型ガード
    • リテラル型
    • Readonly
    • ジェネリック型
    • 型推論
    • 型の互換性
    • never
    • 判別可能なUnion型
    • Index signature(インデックス型)
    • 型の移動
    • 例外のハンドリング
    • ミックスイン
  • JSX
    • React
    • React以外のJSX
  • オプション
    • noImplicitAny
    • strictNullChecks
  • TypeScriptのエラー
    • エラーの理解
    • 一般的なエラー
  • NPM
  • テスト
    • Jest
    • Cypress
  • ツール
    • Prettier
    • Husky
    • Changelog
  • その他のヒント
    • String Based Enums
    • Nominal Typing
    • Stateful Functions
    • Bind is Bad
    • Currying
    • Type Instantiation
    • Lazy Object Literal Initialization
    • Classes are Useful
    • Avoid Export Default
    • Limit Property Setters
    • outFile caution
    • JQuery tips
    • static constructors
    • singleton pattern
    • Function parameters
    • Build Toggles
    • Barrel
    • Create Arrays
    • Typesafe Event Emitter
  • スタイルガイド(コーディング規約)
  • TypeScriptコンパイラの内側
    • Program
    • AST
      • TIP: Visit Children
      • TIP: SyntaxKind enum
      • Trivia
    • Scanner
    • Parser
      • Parser Functions
    • Binder
      • Binder Functions
      • Binder Declarations
      • Binder Container
      • Binder SymbolTable
      • Binder Error Reporting
    • Checker
      • Checker Diagnostics
      • Checker Error Reporting
    • Emitter
      • Emitter Functions
      • Emitter SourceMaps
    • Contributing
GitBook提供
このページ内
  • 変数と関数
  • クラス
  • インターフェース
  • タイプ
  • 名前空間
  • Enum
  • null vs undefined
  • フォーマット
  • 引用符
  • スペース
  • セミコロン
  • 配列
  • ファイル名
  • type vs interface
  • == or ===

役に立ちましたか?

スタイルガイド(コーディング規約)

前へTypesafe Event Emitter次へTypeScriptコンパイラの内側

最終更新 2 年前

役に立ちましたか?

非公式のTypeScriptスタイルガイド

スタイルガイドについて意見を求められることはよくあります。個人的には、私は自分のチームやプロジェクトにコーディングスタイルをあまり強制してはいませんが、コードに一貫性が必要だと思う人がいるような状況において、基準として以下で述べるようなスタイルガイドがあることが役に立つのは確かです。個人的にはスタイルよりもはるかに強い意見を持っている観点があり、それについてはで説明しています(例えば、型アサーションはよくない、プロパティーsetterはよくない、など)🌹

主要セクション:

変数と関数

  • 変数と関数名には camelCaseを使います

理由:従来のJavaScript

悪い

var FooVar;
function BarFunc() { }

良い

var fooVar;
function barFunc() { }

クラス

  • クラス名には PascalCaseを使います。

理由:これは実際には標準のJavaScriptではかなり一般的です。

悪い

class foo { }

良い

class Foo { }
  • クラスメンバとメソッドの camelCaseを使う

理由:当然のことながら、変数と関数の命名規則に従います。

悪い

class Foo {
    Bar: number;
    Baz() { }
}

良い

class Foo {
    bar: number;
    baz() { }
}

インターフェース

  • 名前にはPascalCaseを使います。

理由:クラスに似ています

  • メンバにはcamelCaseを使います。

理由:クラスに似ています

  • プレフィックスにIをつけないでください

Reason: 慣例的ではないため。lib.d.tsはIのない重要なインターフェース(例えば、Window、Documentなど)を定義します。

悪い

interface IFoo {
}

良い

interface Foo {
}

タイプ

  • 名前にはPascalCaseを使います。

理由:クラスに似ています

  • メンバにはcamelCaseを使います。

理由:クラスに似ています

名前空間

  • 名前にPascalCaseを使用する

理由:TypeScriptチームに続くコンベンション。名前空間は事実上静的メンバを持つクラスです。クラス名はPascalCase=>名前空間名はPascalCaseです

悪い

namespace foo {
}

良い

namespace Foo {
}

Enum

  • enum名にはPascalCaseを使います

理由:クラスに似ています。タイプです。

悪い

enum color {
}

良い

enum Color {
}
  • enumメンバに PascalCaseを使用する

理由:言語作成者、TypeScriptチームに従った慣例です。例えばSyntaxKind.StringLiteralです。他の言語からTypeScriptへの翻訳(コード生成)にも役立ちます。

悪い

enum Color {
    red
}

良い

enum Color {
    Red
}

null vs undefined

  • 明示的に使用不可能にするために、どちらも使用しないことを推奨します。

理由:これらの値は、値間の一貫した構造を維持するためによく使用されます。TypeScriptでは型を使用して構造を表します

悪い

let foo = { x: 123, y: undefined };

良い

let foo: { x: number, y?: number } = { x: 123 };
  • 一般的に undefinedを使用してください(代わりに{valid:boolean,value?:Foo}のようなオブジェクトを返すことを検討してください)

悪い

return null;

良い

return undefined;
  • APIまたは従来のAPIの一部である場合はnullを使用します

理由:Node.jsの慣例通りです。NodeBackスタイルコールバックのerrorはnullです。

悪い

cb(undefined)

良い

cb(null)
  • _truthy_を使用すると、オブジェクトが nullまたはundefinedであるかどうかをチェックできます。

悪い

if (error === null)

良い

if (error)
  • == null/!= null(===/!==ではない)を使い、プリミティブにnull/undefinedをチェックします。これはnull/undefinedの両方に働きますが、他の_falsy_値(例:'',0,falseなど)では機能しません。

悪い

if (error !== null) // undefinedを除外しない

良い

if (error != null) // nullもundefinedも除外する

フォーマット

TypeScriptコンパイラには、非常に優れた言語フォーマットのサービスが付属しています。デフォルトで出力される出力は、チームの認知負荷を軽減するのに十分です。

例:

// 型の前にスペースを入れます。つまり、 foo:<スペース>string のようにします。
const foo: string = "hello";

引用符

  • エスケープしない限り、シングルクォート(')を使用することをお勧めします。

ダブルクォートはメリットがないわけではありません: オブジェクトをJSONに簡単にコピーできます。ユーザーが他の言語を使用して、引用文字を変更せずに作業できるようにします。たとえばアポストロフィを使用できます。例えば、He's not going.。しかし、私は、JSコミュニティが公正に決定したものから逸脱することはありません。

  • ダブルクォートを使用できない場合は、バックティック(`)を使用してみてください。

理由:これらは一般に、十分複雑な文字列の意図を表しています。

スペース

  • 2つのスペースを使います。タブではありません。

セミコロン

  • セミコロンを使用してください。

理由:明示的なセミコロンは、言語書式設定ツールで一貫した結果を得るのに役立ちます。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を使います:

type Foo = number | { someProperty: number }
  • extendやimplementsをしたいときはinterfaceを使います。

interface Foo {
  foo: string;
}
interface FooBar extends Foo {
  bar: string;
}
class X implements FooBar {
  foo: string;
  bar: string;
}
  • そうでなければ、その日あなたを幸せにするものを使用してください。

== or ===

コマンドラインでコードを自動的にフォーマットするには、 を使います。また、あなたのIDE(atom/ vscode/vs/sublime)には、すでにフォーマットのサポートが組み込まれています。

理由:他のJavaScriptチームがこれを行っています(、、、、、)。入力が簡単です(ほとんどのキーボードでシフトが必要ありません)。

理由:他のJavaScriptチームがこれを行っています(、、、、、、を参照してください)。 TypeScript/VSCodeチームは4つのスペースを使用しますが、間違いなくエコシステムの例外です。

どちらも。私はTypeScriptのコードベースで使われている===を使用しています。

tsfmt
airbnb
標準
npm
NodeJS
google/angular
facebook/react
Prettierチームもシングルクォートを勧めています
airbnb
idiomatic
標準
npm
node
google/angular
facebook/react
TypeScriptユーザーにとってほとんど安全です
ヒントの章
変数
クラス
インターフェース
タイプ
名前空間
Enum
null vs undefined
書式設定
一重引用符と二重引用符
タブ vs スペース
セミコロン
配列
ファイル名
type vs interface
== or ===