メインコンテンツへスキップ

consistent-type-assertions

型アサーションの一貫した使用を強制します。

🎨

拡張 "plugin:@typescript-eslint/stylistic" ESLintの設定 で有効にすると、このルールが有効になります。

🔧

このルールによって報告された問題の中には、 --fix ESLintコマンドラインオプション.

で自動的に修正可能なものがあります。

💡 このルールによって報告された問題の中には、エディターの.

提案

  • によって手動で修正可能なものがあります。
  • TypeScriptは「型アサーション」のために2つの構文を提供しています。

山括弧: <Type>value

as: value as Type

このルールは、コードベース全体での型アサーションスタイルの使用を標準化することを目的としています。一貫して1つの構文を守ることで、コードの可読性が向上します。

注記

型アサーションは、TypeScriptでは一般的に「型キャスト」とも呼ばれます。ただし、この用語は、他の言語での型キャストの理解とは技術的にわずかに異なります。型アサーションは、TypeScriptコンパイラーに「私はあなたよりよく知っている、実際にはこれは別の型だ!」と言う方法です。
module.exports = {
"rules": {
"@typescript-eslint/consistent-type-assertions": "error"
}
};

constアサーションは、このルールによって常に許可されます。それらの例としては、let x = "hello" as const;let x = <const>"hello";などがあります。

.eslintrc.cjs

Playgroundでこのルールを試す ↗

type Options = [
| {
assertionStyle: 'angle-bracket' | 'as';
objectLiteralTypeAssertions?: 'allow' | 'allow-as-parameter' | 'never';
}
| {
assertionStyle: 'never';
},
];

const defaultOptions: Options = [
{ assertionStyle: 'as', objectLiteralTypeAssertions: 'allow' },
];

オプション

このルールは、次のオプションを受け入れます。

  • assertionStyle
  • このオプションは、期待されるアサーションスタイルを定義します。assertionStyleの有効な値は次のとおりです。
  • asを使用すると、常に... as fooを使用するように強制されます。

angle-bracketを使用すると、常に<foo>...を使用するように強制されます。

neverを使用すると、型アサーションを一切行わないように強制されます。

ほとんどのコードベースでは、JSX構文と競合し、ジェネリック構文と組み合わせると混乱するため、angle-bracketスタイルを使用しないように強制したいと考えるでしょう。

一部のコードベースでは、型安全性をさらに高めるために、neverオプションを使用してアサーションをすべて禁止することを好みます。

objectLiteralTypeAssertions

const x = { ... } as T;(または山括弧を使用した同様のもの)ではなく、常にconst x: T = { ... };を優先します。後者の場合の型アサーションは、不要であるか、おそらくエラーを隠蔽することになります。

コンパイラーは、この構文では余分なプロパティについては警告しますが、必須フィールドの欠落については警告しません。たとえば、const x: { foo: number } = {};はコンパイルに失敗しますが、const x = {} as { foo: number }は成功します。

TypeScript 3.4で導入されたconstアサーションconst x = { foo: 1 } as constは、有益であると見なされ、このオプションでは無視されます。

const x = { foo: 1 } as T;

function bar() {
return { foo: 1 } as T;
}
❌ 不正

✅ 正しい

const x = { foo: 1 } as T;

function bar() {
return { foo: 1 } as T;
}
❌ 不正

Playgroundで開く

{ assertionStyle: 'as', objectLiteralTypeAssertions: 'allow-as-parameter' }のコード例

使用しない場合

型アサーションの一貫性を強制したくない場合。