code: function emitSerializedTypeReferenceNode(node) {
                  var location = node.parent;
                  while (ts.isDeclaration(location) || ts.isTypeNode(location)) {
                      location = location.parent;
                  }
                  // Clone the type name and parent it to a location outside of the current declaration.
                  var typeName = ts.cloneEntityName(node.typeName, location);
                  var result = resolver.getTypeReferenceSerializationKind(typeName);
                  switch (result) {
                      case ts.TypeReferenceSerializationKind.Unknown:
                          var temp = createAndRecordTempVariable(0 /* Auto */);
                          write("(typeof (");
                          emitNodeWithoutSourceMap(temp);
                          write(" = ");
                          emitEntityNameAsExpression(typeName, /*useFallback*/ true);
                          write(") === 'function' && ");
                          emitNodeWithoutSourceMap(temp);
                          write(") || Object");
                          break;
                      case ts.TypeReferenceSerializationKind.TypeWithConstructSignatureAndValue:
                          emitEntityNameAsExpression(typeName, /*useFallback*/ false);
                          break;
                      case ts.TypeReferenceSerializationKind.VoidType:
                          write("void 0");
                          break;
                      case ts.TypeReferenceSerializationKind.BooleanType:
                          write("Boolean");
                          break;
                      case ts.TypeReferenceSerializationKind.NumberLikeType:
                          write("Number");
                          break;
                      case ts.TypeReferenceSerializationKind.StringLikeType:
                          write("String");
                          break;
                      case ts.TypeReferenceSerializationKind.ArrayLikeType:
                          write("Array");
                          break;
                      case ts.TypeReferenceSerializationKind.ESSymbolType:
                          if (languageVersion < 2 /* ES6 */) {
                              write("typeof Symbol === 'function' ? Symbol : Object");
                          }
                          else {
                              write("Symbol");
                          }
                          break;
                      case ts.TypeReferenceSerializationKind.TypeWithCallSignature:
                          write("Function");
                          break;
                      case ts.TypeReferenceSerializationKind.ObjectType:
                          write("Object");
                          break;
                  }
              }
docs: Serializes a TypeReferenceNode to an appropriate JS constructor value. Used by the __metadata decorator.