跳到内容

quoted-type-alias (TC008)

源自 flake8-type-checking 代码检查器。

修复总是可用的。

此规则不稳定且处于预览状态。使用需要 --preview 标志。

作用

检查 PEP 613 显式类型别名和 PEP 695 类型声明中不必要的引号。

为什么这不好?

不必要的字符串前向引用可能会在使用类型提示的运行时库中导致额外的开销。它们也可能与其他运行时用法产生不良的交互作用,例如 PEP 604 类型联合。

仅当 Ruff 能够高度确信引号是不必要的时,该规则才会标记 PEP-613 类型别名。具体来说,任何右侧类型表达式包含下标或属性访问的 PEP-613 类型别名都不会被标记。这是因为类型别名可以引用类型,例如,这些类型在存根文件中是泛型的,但在运行时不是泛型的。这可能意味着类型检查器期望引用的类型使用类型参数进行下标,尽管这样做在运行时如果类型别名值没有被引用将会失败。类似地,类型别名可能需要引用存根文件中存在但在运行时不存在的模块级属性,这意味着类型别名值需要被引用以避免运行时错误。

示例

给定

from typing import TypeAlias

OptInt: TypeAlias = "int | None"

建议改为

from typing import TypeAlias

OptInt: TypeAlias = int | None

给定

type OptInt = "int | None"

建议改为

type OptInt = int | None

修复安全性

除非类型注解包含注释,否则此规则的修复被标记为安全。

另请参阅

此规则仅适用于非存根文件中的类型别名。对于删除其他上下文或存根文件中的引号,请参阅

参考