typescript/consistent-type-assertions Style
功能
强制始终一致地使用 TypeScript 类型断言。
为什么这不好?
混用断言风格(as 与尖括号)会让代码更难阅读和维护。 在某些代码库中,类型断言会被禁止,转而使用更安全的替代方案,例如 类型注解或 satisfies。
示例
以下是此规则的错误代码示例(默认:assertionStyle: "as"):
const value = <Foo>bar;以下是此规则的正确代码示例(默认:assertionStyle: "as"):
const value = bar as Foo;当 objectLiteralTypeAssertions 或 arrayLiteralTypeAssertions 设置为 never 时,针对对象和数组字面量的类型断言,更推荐使用类型注解或 satisfies 运算符,而不是类型断言。
当 objectLiteralTypeAssertions: "never" 和 arrayLiteralTypeAssertions: "never" 时,以下是错误代码示例:
const obj = { a: 1 } as Foo;
const arr = [1, 2] as Foo[];当 objectLiteralTypeAssertions: "never" 和 arrayLiteralTypeAssertions: "never" 时,以下是正确代码示例:
const obj: Foo = { a: 1 };
const obj = { a: 1 } satisfies Foo;配置
此规则接受一个包含以下属性的配置对象:
arrayLiteralTypeAssertions
type: "allow" | "allow-as-parameter" | "never"
数组字面量类型断言是否允许、仅在作为参数时允许,或完全禁止。
"allow"
允许在数组字面量上进行类型断言。
使用此选项时,以下是正确代码示例:
const x = [1, 2] as number[];
const x = ["a"] as Array<string>;"allow-as-parameter"
仅当数组字面量用作函数参数、 throw 目标或默认值时,才允许对其进行类型断言。
使用此选项时,以下是错误代码示例:
const x = [1, 2] as Foo;
const foo = () => [5] as Foo;使用此选项时,以下是正确代码示例:
print([5] as Foo);
throw [1, 2] as Bar;
function f(x = [5] as Foo.Bar) {}"never"
完全禁止在数组字面量上进行类型断言。
使用此选项时,以下是错误代码示例:
const x = [1, 2] as Foo;
print([5] as Foo);使用此选项时,以下是正确代码示例:
const x: Foo = [1, 2];
const x = [1, 2] satisfies Foo;assertionStyle
type: "as" | "angle-bracket" | "never"
强制使用哪种断言语法。
"as"
强制使用 as 语法进行类型断言。
使用此选项时,以下是错误代码示例:
const value = <Foo>bar;使用此选项时,以下是正确代码示例:
const value = bar as Foo;"angle-bracket"
强制使用尖括号语法进行类型断言。
使用此选项时,以下是错误代码示例:
const value = bar as Foo;使用此选项时,以下是正确代码示例:
const value = <Foo>bar;"never"
完全禁止类型断言。
使用此选项时,以下是错误代码示例:
const value = bar as Foo;
const value = <Foo>bar;使用此选项时,以下是正确代码示例:
const value: Foo = bar;
const value = bar satisfies Foo;objectLiteralTypeAssertions
type: "allow" | "allow-as-parameter" | "never"
对象字面量类型断言是否允许、仅在作为参数时允许,或完全禁止。
"allow"
允许在对象字面量上进行类型断言。
使用此选项时,以下是正确代码示例:
const x = { a: 1 } as Foo;
const x = {} as Foo<int>;"allow-as-parameter"
仅当对象字面量用作函数参数、 throw 目标或默认值时,才允许对其进行类型断言。
使用此选项时,以下是错误代码示例:
const x = { a: 1 } as Foo;
const x = {} as Foo<int>;使用此选项时,以下是正确代码示例:
print({ a: 1 } as Foo);
throw { bar: 5 } as Foo;
function f(x = {} as Foo) {}"never"
完全禁止在对象字面量上进行类型断言。
使用此选项时,以下是错误代码示例:
const x = { a: 1 } as Foo;
print({ a: 1 } as Foo);使用此选项时,以下是正确代码示例:
const x: Foo = { a: 1 };
const x = { a: 1 } satisfies Foo;如何使用
To enable this rule using the config file or in the CLI, you can use:
{
"rules": {
"typescript/consistent-type-assertions": "error"
}
}import { defineConfig } from "oxlint";
export default defineConfig({
rules: {
"typescript/consistent-type-assertions": "error",
},
});oxlint --deny typescript/consistent-type-assertionsVersion
此规则在 v1.44.0 中新增。
