consistent-type-assertions
型アサーションの一貫した使用を強制します。
拡張 "plugin:@typescript-eslint/stylistic"
を ESLintの設定 で有効にすると、このルールが有効になります。
このルールによって報告された問題の中には、 --fix
ESLintコマンドラインオプション.
提案
- によって手動で修正可能なものがあります。
- TypeScriptは「型アサーション」のために2つの構文を提供しています。
山括弧: <Type>value
value as Type
このルールは、コードベース全体での型アサーションスタイルの使用を標準化することを目的としています。一貫して1つの構文を守ることで、コードの可読性が向上します。
注記
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
は、有益であると見なされ、このオプションでは無視されます。
any
へのアサーションも、このオプションでは無視されます。{ assertionStyle: 'as', objectLiteralTypeAssertions: 'never' }
のコード例
✅ 正しい
any
へのアサーションも、このオプションでは無視されます。{ assertionStyle: 'as', objectLiteralTypeAssertions: 'never' }
のコード例
Playgroundで開く
{ assertionStyle: 'as', objectLiteralTypeAssertions: 'allow-as-parameter' }
のコード例
使用しない場合