Skip to main content

method-signature-style

Enforce using a particular method signature syntax.

🔧

此规则报告的一些问题可通过 --fix ESLint 命令行选项自动修复


TypeScript 提供了两种定义对象/接口函数属性的方法:

英:TypeScript provides two ways to define an object/interface function property:

interface Example {
// method shorthand syntax
func(arg: string): number;

// regular property with function type
func: (arg: string) => number;
}

两者非常相似; 大多数时候,使用哪一个并不重要。

英:The two are very similar; most of the time it doesn't matter which one you use.

一个好的做法是使用 TypeScript 的 strict 选项(这意味着 strictFunctionTypes),它只能对函数属性进行正确的类型检查(方法签名会获得旧的行为)。

英:A good practice is to use the TypeScript's strict option (which implies strictFunctionTypes) which enables correct typechecking for function properties only (method signatures get old behavior).

TypeScript 常见问题解答:

英:TypeScript FAQ:

同一类型的方法和函数属性的行为不同。 方法的参数始终是双变的,而函数属性在 strictFunctionTypes 下的参数是逆变的。

请参阅 编译器选项的 TypeScript PR 中的原因。

英:See the reasoning behind that in the TypeScript PR for the compiler option.

.eslintrc.cjs
module.exports = {
"rules": {
"@typescript-eslint/method-signature-style": "error"
}
};
在线运行试试这个规则 ↗

选项

此规则接受一个字符串选项:

英:This rule accepts one string option:

  • "property": 强制使用函数的属性签名。 使用它与 TypeScript 的严格模式一起强制执行最大正确性。
  • "method": 强制使用函数的方法签名。 如果你不使用 TypeScript 的严格模式并且更喜欢这种风格,请使用此选项。

默认为 "property"

英:The default is "property".

property

带有 property 选项的代码示例。

英:Examples of code with property option.

interface T1 {
func(arg: string): number;
}
type T2 = {
func(arg: boolean): void;
};
interface T3 {
func(arg: number): void;
func(arg: string): void;
func(arg: boolean): void;
}
Open in Playground

method

带有 method 选项的代码示例。

英:Examples of code with method option.

interface T1 {
func: (arg: string) => number;
}
type T2 = {
func: (arg: boolean) => void;
};
Open in Playground

何时不使用它

如果你不想为对象/接口函数类型强制执行特定样式,和/或如果你不使用 strictFunctionTypes,那么你不需要此规则。

英:If you don't want to enforce a particular style for object/interface function types, and/or if you don't use strictFunctionTypes, then you don't need this rule.

但是,请记住,不一致的风格可能会损害项目的可读性。 我们建议为此规则选择一个最适合你的项目的选项。

英:However, keep in mind that inconsistent style can harm readability in a project. We recommend picking a single option for this rule that works best for your project.

选项

该规则接受以下选项

type Options = ['method' | 'property'];

const defaultOptions: Options = ['property'];

资源