diff --git a/javascript/extractor/src/com/semmle/js/ast/DeclarationFlags.java b/javascript/extractor/src/com/semmle/js/ast/DeclarationFlags.java
index 0025931b189..7ff1e12ee65 100644
--- a/javascript/extractor/src/com/semmle/js/ast/DeclarationFlags.java
+++ b/javascript/extractor/src/com/semmle/js/ast/DeclarationFlags.java
@@ -40,7 +40,7 @@ public class DeclarationFlags {
"is_computed",
"is_abstract_member",
"is_static",
- "hasReadonlyKeyword",
+ "has_readonly_keyword",
"has_public_keyword",
"has_private_keyword",
"has_protected_keyword",
diff --git a/javascript/ql/src/semmle/javascript/Aliases.qll b/javascript/ql/src/semmle/javascript/Aliases.qll
index d978108a653..0341ed30ef6 100644
--- a/javascript/ql/src/semmle/javascript/Aliases.qll
+++ b/javascript/ql/src/semmle/javascript/Aliases.qll
@@ -185,3 +185,8 @@ deprecated predicate hasPrivateKeyword(Property prop) { has_private_keyword(prop
* Use `MemberDeclaration#isProtected() instead.
*/
deprecated predicate hasProtectedKeyword(Property prop) { has_protected_keyword(prop) }
+/**
+ * Alias for the predicate `has_readonly_keyword` defined in the .dbscheme.
+ * Use `FieldDeclaration#isReadonly()` instead.
+ */
+deprecated predicate hasReadonlyKeyword(Property prop) { has_readonly_keyword(prop) }
diff --git a/javascript/ql/src/semmle/javascript/Classes.qll b/javascript/ql/src/semmle/javascript/Classes.qll
index c18184e1edf..af0b4a07e2a 100644
--- a/javascript/ql/src/semmle/javascript/Classes.qll
+++ b/javascript/ql/src/semmle/javascript/Classes.qll
@@ -1040,7 +1040,7 @@ class FieldDeclaration extends MemberDeclaration, @field {
}
/** Holds if this is a TypeScript field annotated with the `readonly` keyword. */
- predicate isReadonly() { hasReadonlyKeyword(this) }
+ predicate isReadonly() { has_readonly_keyword(this) }
/** Holds if this is a TypeScript field marked as optional with the `?` operator. */
predicate isOptional() { isOptionalMember(this) }
diff --git a/javascript/ql/src/semmlecode.javascript.dbscheme b/javascript/ql/src/semmlecode.javascript.dbscheme
index f4771a64ca8..79ee1ff4cfc 100644
--- a/javascript/ql/src/semmlecode.javascript.dbscheme
+++ b/javascript/ql/src/semmlecode.javascript.dbscheme
@@ -523,7 +523,7 @@ is_abstract_class (int id: @classdeclstmt ref);
has_public_keyword (int id: @property ref);
has_private_keyword (int id: @property ref);
has_protected_keyword (int id: @property ref);
-hasReadonlyKeyword (int id: @property ref);
+has_readonly_keyword (int id: @property ref);
hasTypeKeyword (int id: @import_or_export_declaration ref);
isOptionalMember (int id: @property ref);
hasDefiniteAssignmentAssertion (int id: @field_or_vardeclarator ref);
diff --git a/javascript/ql/src/semmlecode.javascript.dbscheme.stats b/javascript/ql/src/semmlecode.javascript.dbscheme.stats
index 694ffea8ab9..9a2dce23825 100644
--- a/javascript/ql/src/semmlecode.javascript.dbscheme.stats
+++ b/javascript/ql/src/semmlecode.javascript.dbscheme.stats
@@ -7985,7 +7985,7 @@
-hasReadonlyKeyword
+has_readonly_keyword
2338
diff --git a/javascript/upgrades/c73fbfca57f3d593b9ff50c6aa3a886d6888efec/upgrade.properties b/javascript/upgrades/c73fbfca57f3d593b9ff50c6aa3a886d6888efec/upgrade.properties
index 3e7e3df1f4d..a3dc940e550 100644
--- a/javascript/upgrades/c73fbfca57f3d593b9ff50c6aa3a886d6888efec/upgrade.properties
+++ b/javascript/upgrades/c73fbfca57f3d593b9ff50c6aa3a886d6888efec/upgrade.properties
@@ -48,3 +48,5 @@ has_private_keyword.rel: reorder hasPrivateKeyword.rel(int prop) prop
hasPrivateKeyword.rel: delete
has_protected_keyword.rel: reorder hasProtectedKeyword.rel(int prop) prop
hasProtectedKeyword.rel: delete
+has_readonly_keyword.rel: reorder hasReadonlyKeyword.rel(int prop) prop
+hasReadonlyKeyword.rel: delete