Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to declare Class fields

I'm trying to create a class with some fields on Google Apps Scripts. I can't even save the file. From what I understand of this SO answer, I'm using the correct syntax for class fields.

V8 runtime is enabled.

The error:

Syntax error: ParseError: Unexpected token = line: 5 file: Airtable_Class.gs

Line 5 is: foo = "bar";

Here's the whole code:

class FieldsTest{
  foo = "bar";
}

like image 820
DBWeinstein Avatar asked Sep 16 '25 00:09

DBWeinstein


2 Answers

This is a known issue. Add a star (★ on top left) to the issue, if you want this to be implemented.

https://issuetracker.google.com/issues/195752915

According to the tracker, it is supported, but it is blocked by the parser.

like image 79
TheMaster Avatar answered Sep 18 '25 15:09

TheMaster


There's a way to simulate static fields in Apps Script. It involves using properties instead of a field. We can create a lazily initiated property that replaces itself with a field, using the following code:

class MyClass {

  static get c() {
    // Delete this property. We have to delete it first otherwise we cannot set it (due to it being a get-only property)
    delete MyClass.c;
    // Replace it with a static value.
    return MyClass.c = {};
  }

}

This approach is better than using a static property, because it also works when instantiating static objects or arrays. To confirm this works, we can use the following:

SpreadsheetApp.getUi().alert(MyClass.c === MyClass.c)

This will only evaluate to true if the object was generated once and stored. If the field remains a property, it will return false, because the object is generated twice.

like image 30
SonGuhun Avatar answered Sep 18 '25 14:09

SonGuhun