Skip to main content

sort-construct-signature

Require construct signatures to be the first member in interfaces.

Deprecated

Configure the replacement's interface member order explicitly. This rule cannot be safely combined with sort-call-signature, because each independently requires its own signature kind to be first.

Targeted pattern scope

This rule targets TSConstructSignatureDeclaration nodes that are not the first child in an interface body.

What this rule reports

This rule reports interface construct signatures when they are not the first member in the interface body.

Why this rule exists

Putting construct signatures first gives constructor-like interfaces a predictable shape.

❌ Incorrect

interface I {
x: string;
new (): string;
}

✅ Correct

interface I {
new (): string;
x: string;
}

Behavior and migration notes

This rule reports only and does not provide an autofix.

Migration is mechanical: move construct signatures above other interface members.

Options

This rule has no options.

Additional examples

interface Factory {
id: string;
new (): FactoryInstance;
}
// ❌ construct signature is not first

interface FactoryFixed {
new (): FactoryInstance;
id: string;
}
// ✅ valid

ESLint flat config example

import etcMisc from "eslint-plugin-etc-misc";

export default [
{
plugins: { "etc-misc": etcMisc },
rules: {
"etc-misc/sort-construct-signature": "error",
},
},
];

When not to use it

Disable this rule if interface member order is not important in your style guide.

Package documentation

Rule catalog ID: R092

Further reading

Adoption resources

  • Start at warning level in CI, then move to error after cleanup.
  • Use focused codemods/autofix batches per package or directory.