diff --git a/util/type.ts b/util/type.ts index 65cb3c1..b615410 100644 --- a/util/type.ts +++ b/util/type.ts @@ -279,6 +279,10 @@ function isReadonlyPropertyIntersection(type: ts.Type, name: ts.__String, checke }); } +function hasModifiersType(type: ts.Type): type is ts.Type & { modifiersType: ts.Type} { + return 'modifiersType' in type; +} + function isReadonlyPropertyFromMappedType(type: ts.Type, name: ts.__String, checker: ts.TypeChecker): boolean | undefined { if (!isObjectType(type) || !isObjectFlagSet(type, ts.ObjectFlags.Mapped)) return; @@ -286,6 +290,10 @@ function isReadonlyPropertyFromMappedType(type: ts.Type, name: ts.__String, chec // well-known symbols are not affected by mapped types if (declaration.readonlyToken !== undefined && !/^__@[^@]+$/.test(name)) return declaration.readonlyToken.kind !== ts.SyntaxKind.MinusToken; + + if (!hasModifiersType(type)) + return; + return isPropertyReadonlyInType((<{modifiersType: ts.Type}>type).modifiersType, name, checker); }