Skip to main content

type-annotation-spacing

danger
We strongly recommend you do not use this rule or any other formatting linter rules. Use a separate dedicated formatter instead. See What About Formatting? for more information.

Require consistent spacing around type annotations.

🛠

Some problems reported by this rule are automatically fixable by the --fix ESLint command line option.

Spacing around type annotations improves readability of the code. Although the most commonly used style guideline for type annotations in TypeScript prescribes adding a space after the colon, but not before it, it is subjective to the preferences of a project. For example:

// with space after, but not before (default if no option is specified)
let foo: string = "bar";

// with no spaces
let foo:string = "bar";

// with space before and after
let foo : string = "bar";

// with space before, but not after
let foo :string = "bar";

// with spaces before and after the fat arrow (default if no option is specified)
type Foo = (string: name) => string;

// with no spaces between the fat arrow
type Foo = (string: name)=>string;

// with space after, but not before the fat arrow
type Foo = (string: name)=> string;

// with space before, but not after the fat arrow
type Foo = (string: name) =>string;
.eslintrc.cjs
module.exports = {
"rules": {
"@typescript-eslint/type-annotation-spacing": "warn"
}
};

Examples

This rule aims to enforce specific spacing patterns around type annotations and function types in type literals.

Options

This rule accepts an options object with the following properties:

interface Options {
before?: boolean;
after?: boolean;
overrides?: {
colon?: {
before?: boolean;
after?: boolean;
};
arrow?: {
before?: boolean;
after?: boolean;
};
variable?: {
before?: boolean;
after?: boolean;
};
parameter?: {
before?: boolean;
after?: boolean;
};
property?: {
before?: boolean;
after?: boolean;
};
returnType?: {
before?: boolean;
after?: boolean;
};
};
}

const defaultOptions: Options = [{}];

Examples of code for this rule with no options at all:

let foo:string = "bar";
let foo :string = "bar";
let foo : string = "bar";

function foo():string {}
function foo() :string {}
function foo() : string {}

class Foo {
name:string;
}

class Foo {
name :string;
}

class Foo {
name : string;
}

type Foo = ()=>{};
type Foo = () =>{};
type Foo = ()=> {};

When Not To Use It

If you don't want to enforce spacing for your type annotations, you can safely turn this rule off.

Further Reading

Resources