Typescript “字符串插值”;无法在数组中将对象转换为基元值。toString";

Typescript “字符串插值”;无法在数组中将对象转换为基元值。toString";,typescript,Typescript,我对Typescript完全陌生,但是我很惊讶console.log可以正确地呈现我的数组,但是字符串插值都是“TypeError:cannotconvert object to primitive value…at Array.toString(native)…” 这是密码 static async createPartsListItemsInOperations(input: Array<PartsListItemQtyInput>, authToken: string):

我对Typescript完全陌生,但是我很惊讶
console.log
可以正确地呈现我的数组,但是字符串插值都是“TypeError:cannotconvert object to primitive value…at Array.toString(native)…”

这是密码

  static async createPartsListItemsInOperations(input: Array<PartsListItemQtyInput>, authToken: string): Promise<any> {
    // console.log renders the array just fine
    console.log(input);
    // String interpolation results in TypeError: Cannot convert object to primitive value... at Array.toString (native)...
    const query = `mutation { createPartsListItemsInOperations(input: ${input}) { ${OperationsProvider.fields} } }`;
    const data = await this.execute(query, authToken);
    return data['createPartsListItemsInOperations'];
  }
静态异步CreatePartsListeMsinoOperations(输入:数组,authToken:string):承诺{ //console.log可以很好地渲染数组 控制台日志(输入); //字符串插值导致TypeError:无法在Array.toString(本机)上将对象转换为基元值。。。 const query=`mutation{createpartslistitemsinooperations(输入:${input}){${OperationsProvider.fields}}}`; const data=wait this.execute(查询,authToken); 返回数据['createPartsListItemsInOperations']; } 在运行时,控制台看起来像

[ { operationId: '7',
    catalogIdentifier: '5c9abda',
    quantity: 1 },
  { operationId: '5',
    catalogIdentifier: '59f7775',
    quantity: 2 },
  { operationId: '4',
    catalogIdentifier: '5c9abda',
    quantity: 3 },
  { operationId: '5',
    catalogIdentifier: '5c9ab8f',
    quantity: 4 },
  { operationId: '6',
    catalogIdentifier: '5c9ab8f',
    quantity: 5 } ]
TypeError: Cannot convert object to primitive value
    at Array.toString (native)
    at Function.<anonymous> (/Users/rkuhar/work/api-gateway/src/api/operations/provider.ts:184:73)
    at Generator.next (<anonymous>)
    at /Users/rkuhar/work/api-gateway/src/api/operations/provider.ts:8:71
    at new Promise (<anonymous>)
    at __awaiter (/Users/rkuhar/work/api-gateway/src/api/operations/provider.ts:4:12)
    at Function.createPartsListItemsInOperations (/Users/rkuhar/work/api-gateway/src/api/operations/provider.ts:123:16)
    at createPartsListItemsInOperations (/Users/rkuhar/work/api-gateway/src/api/operations/schema.ts:321:32)
    at field.resolve (/Users/rkuhar/work/api-gateway/node_modules/graphql-extensions/src/index.ts:155:61)
    at resolveFieldValueOrError (/Users/rkuhar/work/api-gateway/node_modules/graphql/execution/execute.js:531:18)
[{operationId:'7',
catalogIdentifier:'5c9abda',
数量:1},
{操作ID:'5',
catalogIdentifier:'59F77775',
数量:2},
{operationId:'4',
catalogIdentifier:'5c9abda',
数量:3},
{操作ID:'5',
目录标识符:“5c9ab8f”,
数量:4},
{操作ID:'6',
目录标识符:“5c9ab8f”,
数量:5}]
TypeError:无法将对象转换为基元值
at Array.toString(本机)
在功能上。(/Users/rkuhar/work/api gateway/src/api/operations/provider.ts:184:73)
在Generator.next()处
at/Users/rkuhar/work/api-gateway/src/api/operations/provider.ts:8:71
在新的承诺()
在等待者(/Users/rkuhar/work/api gateway/src/api/operations/provider.ts:4:12)
在Function.createpartslistitemsinooperations(/Users/rkuhar/work/api gateway/src/api/operations/provider.ts:123:16)
在createPartsListItemsInOperations(/Users/rkuhar/work/api gateway/src/api/operations/schema.ts:321:32)
在field.resolve(/Users/rkuhar/work/api gateway/node_modules/graphql extensions/src/index.ts:155:61)
在resolveFieldValueOrError(/Users/rkuhar/work/api gateway/node_modules/graphql/execution/execute.js:531:18)

如何将数组输入的字符串表示形式输入到graphql查询字符串中?

我认为
控制台.log
不会调用数组上的toString(),但字符串插值似乎是基于错误的。如您所见,您可以将一个数组传递给
console.log
,它将以可读的形式输出。如果要调用
input.toString()
,您将看到如下内容:

“[对象对象],[对象对象],[对象对象对象],[对象对象对象],[对象对象对象]”


我怀疑这不是graphql查询的有效值。在将其传递给插值之前,您可能需要将其转换为适当的值。

我认为您需要将“input”参数作为json body发送,而不是在查询字符串本身中发送。您可以
JSON.stringify
将输入数组与查询字符串分开。

Nah。这在那里行不通。请注意,变异调用实际上不是JSON。我需要对frickin数组进行某种类型的“toString”。结果表明,最终,这是一个解决方案,尽管是间接的。我更改了我的变异查询字符串以利用查询变量,并让TypeScript JSON对象序列化输入(JSON.stringify)。这是一个有效的graphQL查询(我一直在上游服务上通过GraphiQL运行该精确查询)…我只需要输入数组的字符串值。不过,你的推理是正确的。将console.log调用更改为
console.log(inputs.toString())仅在字符串插值之前显示TypeError stacktrace。谢谢,但是没有快乐。如何“stringify”输入数组?如果您只是尝试获取数组的字符串表示,那么应该能够使用JSON.stringify(输入)