禁止使用无效的 void 类型
禁止在泛型或返回类型之外使用
void
类型。
在"plugin:@typescript-eslint/strict"
中扩展ESLint 配置将启用此规则。
TypeScript 中的void
指的是一个应该被忽略的函数返回值。尝试在返回类型或泛型类型参数之外使用void
类型通常是程序员错误的标志。即使使用正确,void
也可能对其他开发人员造成误解。
void
类型意味着不能与任何其他类型混合,除了never
,它接受所有类型。如果您认为需要此类型,则可能需要使用undefined
类型。
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 NoOp = () => void;
function noop(): void {}
let trulyUndefined = void 0;
async function promiseMeSomething(): Promise<void> {}
type stillVoid = void | never;
在游乐场中打开选项
此规则接受以下选项
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
是否与其他类型一起使用,或是否在无效位置使用,则不需要此规则。