Skip to content

Latest commit

 

History

History
83 lines (55 loc) · 1.65 KB

no-mixed-types.md

File metadata and controls

83 lines (55 loc) · 1.65 KB

Restrict types so that only members of the same kind are allowed in them (functional/no-mixed-types)

💼 This rule is enabled in the following configs: ☑️ lite, no-other-paradigms, ✅ recommended, 🔒 strict.

💭 This rule requires type information.

This rule enforces that an aliased type literal or an interface only has one type of members, eg. only data properties or only functions.

Rule Details

Mixing functions and data properties in the same type is a sign of object-orientation style.

❌ Incorrect

/* eslint functional/no-mixed-types: "error" */

type Foo = {
  prop1: string;
  prop2: () => string;
};

✅ Correct

/* eslint functional/no-mixed-types: "error" */

type Foo = {
  prop1: string;
  prop2: number;
};
/* eslint functional/no-mixed-types: "error" */

type Foo = {
  prop1: () => string;
  prop2(): number;
};

Limitations

This rule will only check alias type literal declarations and interface declarations. Advanced types will not be checked. For example union and intersection types will not be checked.

Options

This rule accepts an options object of the following type:

type Options = {
  checkInterfaces: boolean;
  checkTypeLiterals: boolean;
};

Default Options

const defaults = {
  checkInterfaces: true,
  checkTypeLiterals: true,
};

checkInterfaces

If true, interface declarations will be checked.

checkTypeLiterals

If true, aliased type literal declarations will be checked.