2 回答

TA貢獻(xiàn)1883條經(jīng)驗(yàn) 獲得超3個(gè)贊
默認(rèn)情況下,GraphQL 中的參數(shù)可以為空(即可選)。因此,如果您的類型定義如下所示:
companies(limit:?Int):?[Company]
您不需要做任何其他事情就可以成為limit
可選的——它已經(jīng)是了。如果你想成為必需的,你可以通過(guò)將 a 附加到這樣的類型來(lái)limit
使其不可為空:!
companies(limit:?Int!):?[Company]
您看到的錯(cuò)誤與參數(shù)類型無(wú)關(guān)limit
。問(wèn)題在于您發(fā)送的查詢,根據(jù)錯(cuò)誤消息,它看起來(lái)像這樣:
query?($limit:?Int){ ??companies?(limit:?undefined)?{ ????#?... ??} }
這里有兩個(gè)問(wèn)題:第一,您正在定義一個(gè)變量($limit),您實(shí)際上從未在查詢中使用它(如第二個(gè)錯(cuò)誤所示)。第二,您將限制設(shè)置為undefined
,這不是 GraphQL 中的有效文字。
您應(yīng)該使用變量將任何動(dòng)態(tài)值傳遞給您的查詢,而不是使用字符串插值。例如:
query?($limit:?Int){ ??companies?(limit:?$limit)?{ ????#?... ??} }
如果變量可以為空(注意我們使用Int
而不是Int!
),那么它可以從請(qǐng)求中完全省略,有效地使參數(shù)的值在服務(wù)器端未定義。

TA貢獻(xiàn)1807條經(jīng)驗(yàn) 獲得超9個(gè)贊
下面是一個(gè)示例,說(shuō)明如何在客戶端上定義查詢并傳遞非必需參數(shù)。不確定您的客戶端配置,但您可能想使用像 graphql-tag 這樣的庫(kù)將字符串轉(zhuǎn)換為 AST。
const GET_COMPANIES = gql`
query Companies($limit: Int) {
companies(limit: $limit) {
... // return fields
}
}
`;
添加回答
舉報(bào)