diff --git a/packages/eslint-plugin/src/rules/no-type-alias.ts b/packages/eslint-plugin/src/rules/no-type-alias.ts index 59712756163..c53b7d1ee68 100644 --- a/packages/eslint-plugin/src/rules/no-type-alias.ts +++ b/packages/eslint-plugin/src/rules/no-type-alias.ts @@ -262,7 +262,11 @@ export default util.createRule({ } else if ( // eslint-disable-next-line @typescript-eslint/internal/prefer-ast-types-enum type.node.type.endsWith('Keyword') || - aliasTypes.has(type.node.type) + aliasTypes.has(type.node.type) || + (type.node.type === AST_NODE_TYPES.TSTypeOperator && + type.node.operator === 'readonly' && + type.node.typeAnnotation && + aliasTypes.has(type.node.typeAnnotation.type)) ) { // alias / keyword checkAndReport(allowAliases!, isTopLevel, type, 'Aliases'); diff --git a/packages/eslint-plugin/tests/rules/no-type-alias.test.ts b/packages/eslint-plugin/tests/rules/no-type-alias.test.ts index 29c4f85b2f4..e06233aeb46 100644 --- a/packages/eslint-plugin/tests/rules/no-type-alias.test.ts +++ b/packages/eslint-plugin/tests/rules/no-type-alias.test.ts @@ -213,6 +213,10 @@ type Foo = Bar & string; code: 'type Foo = string | string[];', options: [{ allowAliases: 'in-unions-and-intersections' }], }, + { + code: 'type Foo = string | readonly string[];', + options: [{ allowAliases: 'in-unions-and-intersections' }], + }, { code: 'type Foo = string | string[];', options: [{ allowAliases: 'in-unions' }],