跳至主要内容

禁止使用无效的 void 类型

禁止在泛型或返回类型之外使用void类型。

🔒

"plugin:@typescript-eslint/strict"中扩展ESLint 配置将启用此规则。

TypeScript 中的void指的是一个应该被忽略的函数返回值。尝试在返回类型或泛型类型参数之外使用void类型通常是程序员错误的标志。即使使用正确,void也可能对其他开发人员造成误解。

void类型意味着不能与任何其他类型混合,除了never,它接受所有类型。如果您认为需要此类型,则可能需要使用undefined类型。

.eslintrc.cjs
module.exports = {
"rules": {
"@typescript-eslint/no-invalid-void-type": "error"
}
};

在游乐场中尝试此规则 ↗

示例

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;
}
在游乐场中打开

选项

此规则接受以下选项

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>();
在游乐场中打开

以下模式被认为是使用{ allowInGenericTypeArguments: ['Ex.Mx.Tx'] }的警告

logAndReturn<void>(undefined);

type NotAllowedVoid1 = Mx.Tx<void>;
type NotAllowedVoid2 = Tx<void>;
type NotAllowedVoid3 = Promise<void>;
在游乐场中打开

以下模式不被认为是使用{ allowInGenericTypeArguments: ['Ex.Mx.Tx'] }的警告

type AllowedVoid = Ex.Mx.Tx<void>;
type AllowedVoidUnion = void | Ex.Mx.Tx<void>;
在游乐场中打开

allowAsThisParameter

当设置为true时,此选项允许将函数的this参数指定为void。此模式可用于明确标记不使用this参数的函数类型。 有关更多信息,请参阅 TypeScript 文档.

此选项默认情况下为false

以下模式在使用 { allowAsThisParameter: false } 时被视为警告,但在使用 { allowAsThisParameter: true } 时有效。

function doThing(this: void) {}
class Example {
static helper(this: void) {}
callback(this: void) {}
}
在游乐场中打开

何时不使用它

如果您不关心 void 是否与其他类型一起使用,或是否在无效位置使用,则不需要此规则。

资源