code: function checkThatExpressionIsProperSymbolReference(expression, expressionType, reportError) {
              if (expressionType === unknownType) {
                  // There is already an error, so no need to report one.
                  return false;
              }
              if (!ts.isWellKnownSymbolSyntactically(expression)) {
                  return false;
              }
              // Make sure the property type is the primitive symbol type
              if ((expressionType.flags & 512 /* ESSymbol */) === 0) {
                  if (reportError) {
                      error(expression, ts.Diagnostics.A_computed_property_name_of_the_form_0_must_be_of_type_symbol, ts.getTextOfNode(expression));
                  }
                  return false;
              }
              // The name is Symbol.<someName>, so make sure Symbol actually resolves to the
              // global Symbol object
              var leftHandSide = expression.expression;
              var leftHandSideSymbol = getResolvedSymbol(leftHandSide);
              if (!leftHandSideSymbol) {
                  return false;
              }
              var globalESSymbol = getGlobalESSymbolConstructorSymbol();
              if (!globalESSymbol) {
                  // Already errored when we tried to look up the symbol
                  return false;
              }
              if (leftHandSideSymbol !== globalESSymbol) {
                  if (reportError) {
                      error(leftHandSide, ts.Diagnostics.Symbol_reference_does_not_refer_to_the_global_Symbol_constructor_object);
                  }
                  return false;
              }
              return true;
          }
docs: A proper symbol reference requires the following:
  1. The property access denotes a property that exists
  2. The expression is of the form Symbol.<identifier>
  3. The property access is of the primitive type symbol.
  4. Symbol in this context resolves to the global Symbol object