code: private void addTypeDeclarations(
        Scope scope, ClassDeclarationMetadata metadata, Node insertionPoint) {
      for (ClassProperty property : metadata.getPrototypeMembersToDeclare().values()) {
        Node declaration =
            property.getDeclaration(astFactory, scope, metadata.getClassPrototypeNode().cloneTree());
        declaration.useSourceInfoIfMissingFromForTree(metadata.getClassNameNode());
        insertionPoint.getParent().addChildAfter(declaration, insertionPoint);
        insertionPoint = declaration;
      }
      for (ClassProperty property : metadata.getClassMembersToDeclare().values()) {
        Node declaration =
            property.getDeclaration(astFactory, scope, metadata.getFullClassNameNode().cloneTree());
        declaration.useSourceInfoIfMissingFromForTree(metadata.getClassNameNode());
        insertionPoint.getParent().addChildAfter(declaration, insertionPoint);
        insertionPoint = declaration;
      }
    }
docs: Add declarations for properties that were defined with a getter and/or setter, so that the
  typechecker knows those properties exist on the class. This is a temporary solution.
  Eventually, the type checker should understand Object.defineProperties calls directly.