<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                企業??AI智能體構建引擎,智能編排和調試,一鍵部署,支持知識庫和私有化部署方案 廣告
                ## 標量 GraphQL 對象類型具有名稱和字段,但在某些時候,這些字段必須解析為一些具體數據。 這就是標量類型的用武之地:它們代表查詢的葉子(在此處閱讀更多內容)。 GraphQL 包括以下默認類型:`Int`、`Float`、`String`、`Boolean` 和 `ID`。 除了這些內置類型之外,您可能還需要支持自定義原子數據類型(例如,`Date`(日期))。 #### 代碼優先[#](#code-first)代碼優先方法附帶五個標量,其中三個是現有 GraphQL 類型的簡單別名。 * `ID`(`GraphQLID` 的別名) - 表示唯一標識符,通常用于重新獲取對象或作為緩存的鍵 * `Int`(`GraphQLInt` 的別名) - 帶符號的 32 位整數 * `Float`(`GraphQLFloat` 的別名) - 有符號雙精度浮點值 * `GraphQLISODateTime`\- UTC 的日期時間字符串(默認用于表示`Date`類型) * `GraphQLTimestamp`\- 一個有符號整數,將日期和時間表示為從 UNIX 紀元開始的毫秒數 默認使用`GraphQLISODateTime`(例如`2019-12-03T09:54:33Z`)來表示`Date`類型。 要改用`GraphQLTimestamp`,請將`buildSchemaOptions`對象的`dateScalarMode`設置為`'timestamp'`,如下所示: ~~~typescript GraphQLModule.forRoot({ buildSchemaOptions: { dateScalarMode: 'timestamp', } }), ~~~ 同樣,默認使用 GraphQLFloat 來表示數字類型。 要改用 GraphQLInt,請將 `buildSchemaOptions` 對象的 `numberScalarMode` 設置為“整數”,如下所示: ~~~typescript GraphQLModule.forRoot({ buildSchemaOptions: { numberScalarMode: 'integer', } }), ~~~ 此外,您可以創建自定義標量。 例如,要創建日期標量,只需創建一個新類。 ~~~typescript import { Scalar, CustomScalar } from '@nestjs/graphql'; import { Kind, ValueNode } from 'graphql'; @Scalar('Date', (type) => Date) export class DateScalar implements CustomScalar<number, Date> { description = 'Date custom scalar type'; parseValue(value: number): Date { return new Date(value); // value from the client } serialize(value: Date): number { return value.getTime(); // value sent to the client } parseLiteral(ast: ValueNode): Date { if (ast.kind === Kind.INT) { return new Date(ast.value); } return null; } } ~~~ 有了這個,注冊 DateScalar 作為提供者。 ~~~typescript @Module({ providers: [DateScalar], }) export class CommonModule {} ~~~ 現在我們可以在我們的類中使用 `Date` 類型了。 ~~~typescript @Field() creationDate: Date; ~~~ #### 架構優先[#](#schema-first) 要定義自定義標量(在[此處](https://www.apollographql.com/docs/graphql-tools/scalars.html)閱讀有關標量的更多信息),請創建類型定義和專用解析器。 在這里(如官方文檔中所示),我們將使用 `graphql-type-json` 包進行演示。 這個 npm 包定義了一個 JSON GraphQL 標量類型。 從安裝包開始: ~~~bash $ npm i --save graphql-type-json ~~~ 安裝包后,我們將自定義解析器傳遞給 forRoot() 方法: ~~~typescript import GraphQLJSON from 'graphql-type-json'; @Module({ imports: [ GraphQLModule.forRoot({ typePaths: ['./**/*.graphql'], resolvers: { JSON: GraphQLJSON }, }), ], }) export class AppModule {} ~~~ 現在我們可以在類型定義中使用 JSON 標量: ~~~graphql scalar JSON type Foo { field: JSON } ~~~ 定義標量類型的另一種方法是創建一個簡單的類。 假設我們想用 Date 類型增強我們的模式。 ~~~typescript import { Scalar, CustomScalar } from '@nestjs/graphql'; import { Kind, ValueNode } from 'graphql'; @Scalar('Date') export class DateScalar implements CustomScalar<number, Date> { description = 'Date custom scalar type'; parseValue(value: number): Date { return new Date(value); // value from the client } serialize(value: Date): number { return value.getTime(); // value sent to the client } parseLiteral(ast: ValueNode): Date { if (ast.kind === Kind.INT) { return new Date(ast.value); } return null; } } ~~~ 有了這個,注冊 `DateScalar` 作為提供者。 ~~~typescript @Module({ providers: [DateScalar], }) export class CommonModule {} ~~~ 現在我們可以在類型定義中使用 `Date` 標量。 ~~~graphql scalar Date ~~~ 默認情況下,為所有標量生成的 TypeScript 定義是 any - 這不是特別安全的。 但是,當您指定如何生成類型時,您可以配置 Nest 如何為您的自定義標量生成類型: ~~~typescript import { GraphQLDefinitionsFactory } from '@nestjs/graphql'; import { join } from 'path'; const definitionsFactory = new GraphQLDefinitionsFactory() definitionsFactory.generate({ typePaths: ['./src/**/*.graphql'], path: join(process.cwd(), 'src/graphql.ts'), outputAs: 'class', defaultScalarType: 'unknown', customScalarTypeMapping: { DateTime: 'Date', BigNumber: '_BigNumber', }, additionalHeader: "import _BigNumber from 'bignumber.js'", }) ~~~ > **提示**:或者,您可以改用類型引用,例如:`DateTime: Date`。 在這種情況下,`GraphQLDefinitionsFactory` 將提取指定類型(`Date.name`)的名稱屬性來生成 TS 定義。 注意:需要為非內置類型(自定義類型)添加導入語句。 現在,給定以下 GraphQL 自定義標量類型: ~~~graphql scalar DateTime scalar BigNumber scalar Payload ~~~ 我們現在將在 `src/graphql.ts` 中看到以下生成的 TypeScript 定義: ~~~typescript import _BigNumber from 'bignumber.js' export type DateTime = Date export type BigNumber = _BigNumber export type Payload = unknown ~~~ 在這里,我們使用了 `customScalarTypeMapping` 屬性來提供我們希望為自定義標量聲明的類型的映射。 我們還提供了一個附加的`Header` 屬性,以便我們可以添加這些類型定義所需的任何導入。 最后,我們添加了一個 `defaultScalarType 'unknown'`,因此任何未在 `customScalarTypeMapping` 中指定的自定義標量都將被別名為 `unknown` 而不是 any(TypeScript 建議從 3.0 開始使用以增加類型安全)。 > 請注意,我們已經從 `bignumber.js` 導入了 `_BigNumber`; 這是為了避免循環類型引用。
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看