functional/no-mixed-types
March 2, 2026 ยท View on GitHub
๐ Restrict types so that only members of the same kind are allowed in them.
๐ผ This rule is enabled in the following configs: โ๏ธ lite,
noOtherParadigms, โ
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.