no-invalid-void-type
ジェネリックまたは戻り値の型以外での`void`型を禁止します。
拡張 "plugin:@typescript-eslint/strict"
における ESLint設定 でこのルールが有効になります。
TypeScriptの`void`は、無視されることを意図した関数の戻り値を表します。戻り値の型やジェネリック型引数の外で`void`型を使用しようとすると、多くの場合、プログラマのエラーを示します。`void`は、正しく使用されていても、他の開発者にとって誤解を招く可能性があります。
`void`型は、すべての型を受け入れる`never`型を除き、他のどの型とも混合できません。これが必要だと思うなら、おそらく代わりに`undefined`型を使用するべきです。
module.exports = {
"rules": {
"@typescript-eslint/no-invalid-void-type": "error"
}
};
Playgroundでこのルールを試してみてください ↗
例
- ❌ 正しくない
- ✅ 正しい
type PossibleValues = string | number | void;
type MorePossibleValues = string | ((number & any) | (string | void));
function logSomething(thing: void) {}
function printArg<T = void>(arg: T) {}
logAndReturn<void>(undefined);
interface Interface {
lambda: () => void;
prop: void;
}
class MyClass {
private readonly propName: void;
}
Playgroundで開くtype NoOp = () => void;
function noop(): void {}
let trulyUndefined = void 0;
async function promiseMeSomething(): Promise<void> {}
type stillVoid = void | never;
Playgroundで開くオプション
このルールは次のオプションを受け入れます。
type Options = [
{
allowAsThisParameter?: boolean;
allowInGenericTypeArguments?: [string, ...string[]] | boolean;
},
];
const defaultOptions: Options = [
{ allowInGenericTypeArguments: true, allowAsThisParameter: false },
];
allowInGenericTypeArguments
このオプションを使用すると、`void`をジェネリック型パラメータの有効な値として使用できるかどうかを制御できます。
あるいは、`void`をジェネリック型パラメータとして受け入れることができる型をホワイトリストに登録する文字列の配列を指定することもできます。
このオプションで有効とみなされる型は、`void`とのユニオン型の一部として有効とみなされます。
このオプションはデフォルトで`true`です。
次のパターンは、`{ allowInGenericTypeArguments: false }`の場合、警告とみなされます。
logAndReturn<void>(undefined);
let voidPromise: Promise<void> = new Promise<void>(() => {});
let voidMap: Map<string, void> = new Map<string, void>();
Playgroundで開く次のパターンは、`{ allowInGenericTypeArguments: ['Ex.Mx.Tx'] }`の場合、警告とみなされます。
logAndReturn<void>(undefined);
type NotAllowedVoid1 = Mx.Tx<void>;
type NotAllowedVoid2 = Tx<void>;
type NotAllowedVoid3 = Promise<void>;
Playgroundで開く次のパターンは、`{ allowInGenericTypeArguments: ['Ex.Mx.Tx'] }`の場合、警告とみなされません。
type AllowedVoid = Ex.Mx.Tx<void>;
type AllowedVoidUnion = void | Ex.Mx.Tx<void>;
Playgroundで開くallowAsThisParameter
このオプションでは、`true`に設定した場合、関数の`this`パラメータを`void`にすることができます。このパターンは、`this`引数を使用しない関数型に明示的にラベルを付けるのに役立ちます。詳細については、TypeScriptのドキュメントを参照してください。
このオプションはデフォルトで`false`です。
次のパターンは、`{ allowAsThisParameter: false }`の場合、警告とみなされますが、`{ allowAsThisParameter: true }`の場合、有効です。
function doThing(this: void) {}
class Example {
static helper(this: void) {}
callback(this: void) {}
}
Playgroundで開く使用しない場合
`void`が他の型で使用されているか、無効な場所で使用されているかを気にしない場合は、このルールは必要ありません。