Skip to main content

typescript/no-boolean-literal-type

Disallow optional boolean literal property types.

Targeted pattern scope​

This rule targets optional interface/type property signatures where the type is the boolean literal true or false.

It applies to TSPropertySignature[optional=true] with literal boolean type annotations.

What this rule reports​

This rule reports optional property declarations typed as true or false.

Why this rule exists​

For optional properties, literal boolean types are usually overly restrictive and are commonly intended to be boolean.

❌ Incorrect​

interface Flags {
on?: true;
}

✅ Correct​

interface Flags {
on?: boolean;
}

Behavior and migration notes​

This rule reports only and does not provide an autofix.

Migration is typically replacing ?: true / ?: false with ?: boolean.

Options​

This rule has no options.

Additional examples​

interface Flags {
enabled?: false;
}
// ❌ reported

interface FlagsFixed {
enabled?: boolean;
}
// ✅ valid

ESLint flat config example​

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

export default [
{
plugins: { "etc-misc": etcMisc },
rules: {
"etc-misc/typescript/no-boolean-literal-type": "error",
},
},
];

When not to use it​

Disable this rule if optional literal booleans are part of your public type contracts.

Package documentation​

Rule catalog ID: R112

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.