private renderType()

in src/languages/go.ts [959:1004]


  private renderType(
    typeNode: ts.Node,
    typeSymbol: ts.Symbol | undefined,
    type: ts.Type | undefined,
    isPtr: boolean,
    fallback: string,
    renderer: GoRenderer,
  ): string {
    if (type === undefined) {
      return fallback;
    }

    const jsiiType = determineJsiiType(renderer.typeChecker, type);

    const doRender = (jType: JsiiType, asPtr: boolean, typeSym: ts.Symbol | undefined): string => {
      const prefix = asPtr ? '*' : '';
      switch (jType.kind) {
        case 'unknown':
          return fallback;
        case 'error':
          renderer.report(typeNode, jType.message);
          return fallback;
        case 'map':
          return `map[string]${doRender(jType.elementType, true, jType.elementTypeSymbol)}`;
        case 'list':
          return `[]${doRender(jType.elementType, true, jType.elementTypeSymbol)}`;
        case 'namedType':
          return this.goName(jType.name, renderer, typeSym);
        case 'builtIn':
          switch (jType.builtIn) {
            case 'boolean':
              return `${prefix}bool`;
            case 'number':
              return `${prefix}f64`;
            case 'string':
              return `${prefix}string`;
            case 'any':
              return 'interface{}';
            case 'void':
              return '';
          }
      }
    };

    return doRender(jsiiType, isPtr, typeSymbol);
  }