Enforces a consistent member delimiter style in interfaces and type literals. There are three member delimiter styles primarily used in TypeScript:
- Semicolon style (default, preferred in TypeScript).
interface Foo {
name: string;
greet(): void;
}
type Bar = {
name: string;
greet(): void;
}- Comma style (JSON style).
interface Foo {
name: string,
greet(): void,
}
type Bar = {
name: string,
greet(): void,
}- Linebreak (none) style.
interface Foo {
name: string
greet(): void
}
type Bar = {
name: string
greet(): void
}The rule also enforces the presence (or absence) of the delimiter in the last member of the interface and/or type literal. Finally, this rule can enforce separate delimiter syntax for single line declarations.
This rule aims to standardise the way interface and type literal members are delimited.
interface BaseConfig {
multiline?: {
delimiter?: "none" | "semi" | "comma";
requireLast?: boolean;
};
singleline?: {
delimiter?: "semi" | "comma";
requireLast?: boolean;
};
}
type Config = BaseConfig & {
overrides?: {
interface?: BaseConfig;
typeLiteral?: BaseConfig;
};
};Default config:
{
"multiline": {
"delimiter": "semi",
"requireLast": true
},
"singleline": {
"delimiter": "semi",
"requireLast": false
}
}multiline config only applies to multiline interface/type definitions.
singleline config only applies to single line interface/type definitions.
The two configs are entirely separate, and do not effect one another.
Accepts three values (or two for singleline):
comma- each member should be delimited with a comma (,).semi- each member should be delimited with a semicolon (;).none- each member should be delimited with nothing.- NOTE - this is not an option for
singlelinebecause having no delimiter between members on a single line is a syntax error in TS.
- NOTE - this is not an option for
Determines whether or not the last member in the interface/type should have a delimiter:
true- the last member must have a delimiter.false- the last member must not have a delimiter.
Allows you to specify options specifically for either interfaces or type definitions / inline types.
For example, to require commas for types, and semicolons for multiline interfaces:
{
"multiline": {
"delimiter": "comma",
"requireLast": true
},
"singleline": {
"delimiter": "comma",
"requireLast": true
},
"overrides": {
"interface": {
"multiline": {
"delimiter": "semi",
"requireLast": true
}
}
}
}Examples of incorrect code for this rule with the default config:
// missing semicolon delimiter
interface Foo {
name: string
greet(): string
}
// using incorrect delimiter
interface Bar {
name: string,
greet(): string,
}
// missing last member delimiter
interface Baz {
name: string;
greet(): string
}
// incorrect delimiter
type FooBar = { name: string, greet(): string }
// last member should not have delimiter
type FooBar = { name: string; greet(): string; }Examples of correct code for this rule with the default config:
interface Foo {
name: string;
greet(): string;
}
interface Foo { name: string }
type Bar = {
name: string;
greet(): string;
}
type Bar = { name: string }
type FooBar = { name: string; greet(): string }If you don't care about enforcing a consistent member delimiter in interfaces and type literals, then you will not need this rule.