{"id":48247,"date":"2022-12-21T00:17:05","date_gmt":"2023-07-04T23:20:49","guid":{"rendered":"https:\/\/www.silicloud.com\/zh\/blog\/%e4%bd%bf%e7%94%a8apollo-cli%e5%8f%af%e4%bb%a5%e4%bb%8egraphql%e6%a8%a1%e5%bc%8f%e8%87%aa%e5%8a%a8%e7%94%9f%e6%88%90typescript%e7%b1%bb%e5%9e%8b%e5%ae%9a%e4%b9%89%e3%80%82\/"},"modified":"2024-04-29T06:15:05","modified_gmt":"2024-04-28T22:15:05","slug":"%e4%bd%bf%e7%94%a8apollo-cli%e5%8f%af%e4%bb%a5%e4%bb%8egraphql%e6%a8%a1%e5%bc%8f%e8%87%aa%e5%8a%a8%e7%94%9f%e6%88%90typescript%e7%b1%bb%e5%9e%8b%e5%ae%9a%e4%b9%89%e3%80%82","status":"publish","type":"post","link":"https:\/\/www.silicloud.com\/zh\/blog\/%e4%bd%bf%e7%94%a8apollo-cli%e5%8f%af%e4%bb%a5%e4%bb%8egraphql%e6%a8%a1%e5%bc%8f%e8%87%aa%e5%8a%a8%e7%94%9f%e6%88%90typescript%e7%b1%bb%e5%9e%8b%e5%ae%9a%e4%b9%89%e3%80%82\/","title":{"rendered":"\u4f7f\u7528Apollo CLI\u53ef\u4ee5\u4eceGraphQL\u6a21\u5f0f\u81ea\u52a8\u751f\u6210TypeScript\u7c7b\u578b\u5b9a\u4e49"},"content":{"rendered":"<p>\u4e3a\u4e86\u51cf\u5c11\u5728\u4f7f\u7528TypeScript\u65f6\u5728GraphQL\uff08Apollo Client\uff09\u4e2d\u7684\u7e41\u7410\u5de5\u4f5c\uff0c\u6211\u4eec\u53ef\u4ee5\u4f7f\u7528Apollo CLI\uff08apollo-tooling\uff09\u4eceSchema\u81ea\u52a8\u751f\u6210TypeScript\u7684\u7c7b\u578b\u5b9a\u4e49\uff0c\u4ee5\u907f\u514d\u5728TypeScript\u7684\u7c7b\u578b\u5b9a\u4e49\u548cSchema\u7684\u5b9a\u4e49\u4e2d\u91cd\u590d\u7f16\u5199\u3002<\/p>\n<p>\u963f\u6ce2\u7f57\u547d\u4ee4\u884c\u754c\u9762 &#8211; \u963f\u6ce2\u7f57\u6587\u6863<br \/>\n\u963f\u6ce2\u7f57\u547d\u4ee4\u884c\u754c\u9762 &#8211; Github<\/p>\n<p>\u8fd9\u4e2a\u540d\u5b57\u770b\u8d77\u6765\u662f&#8221;Apollo CLI&#8221;\uff0c\u4f46\u5728Github\u4e0a\u7684\u4ed3\u5e93\u540d\u662f&#8221;apollo-tooling&#8221;\uff0c\u5728npm\u4e0a\u662f&#8221;apollo&#8221;\uff0c\u800c\u4e14\u4e0e&#8221;Apollo Client&#8221;\u4e5f\u5f88\u76f8\u4f3c\uff0c\u6709\u70b9\u4ee4\u4eba\u56f0\u60d1\u3002\u5728\u672c\u6587\u4e2d\uff0c\u6211\u4eec\u5c06\u4f7f\u7528&#8221;apollo-tooling&#8221;\u8fd9\u4e2a\u540d\u5b57\u3002<\/p>\n<h1>\u5b89\u88c5 Apollo-Tooling(Apollo CLI)\u3002<\/h1>\n<p>Apollo-tooling\u662f\u4e00\u4e2a\u5de5\u5177\uff0c\u5b83\u4f7f\u5f97\u53ef\u4ee5\u5728\u547d\u4ee4\u884c\u4e0a\u64cd\u4f5cApollo\u63d0\u4f9b\u7684\u5404\u79cd\u5e93\u3002<\/p>\n<p>Apollo CLI \u662f\u4e00\u4e2a npm \u5305\u3002<\/p>\n<h2>\u9519\u8bef\uff1a\u65e0\u6cd5\u4ece\u53e6\u4e00\u4e2a\u6a21\u5757\u6216\u9886\u57df\u4f7f\u7528GraphQLSchema &#8220;[object GraphQLSchema]&#8221;\u3002<\/h2>\n<p>\u5728\u5df2\u7ecf\u5b89\u88c5\u4e86&#8221;graphql&#8221;: &#8220;^14.5.8&#8243;\u7684\u4f9d\u8d56\u9879\u7684\u60c5\u51b5\u4e0b\uff0c\u5f53\u6211\u989d\u5916\u5b89\u88c5\u4e86&#8221;apollo&#8221;: &#8220;^2.23.0&#8243;\u540e\uff0c\u6211\u5728\u6267\u884capollo-tooling\u547d\u4ee4\u65f6\u9047\u5230\u4e86\u4ee5\u4e0b\u9519\u8bef\u3002<\/p>\n<pre class=\"post-pre\"><code>Error: Cannot use GraphQLSchema \"[object GraphQLSchema]\" from another module or realm.\r\nEnsure that there is only one instance of \"graphql\" in the node_modules\r\ndirectory. If different versions of \"graphql\" are the dependencies of other\r\nrelied on modules, use \"resolutions\" to ensure only one version is installed.\r\nhttps:\/\/yarnpkg.com\/en\/docs\/selective-version-resolutions\r\nDuplicate \"graphql\" modules cannot be used at the same time since different\r\nversions may have different capabilities and behavior. The data from one\r\nversion used in the function from another could produce confusing and\r\nspurious results.\r\n<\/code><\/pre>\n<p>\u5728\u67e5\u770b node_modules &gt; apollo &gt; package.json \u65f6\uff0c\u53d1\u73b0 dependencies \u4e2d\u6709\u4e00\u9879 &#8220;graphql&#8221;: &#8220;14.0.2 &#8211; 14.2.0 || ^14.3.1&#8221; \u7684\u5185\u5bb9\uff0c\u800c\u4e14\u5728 node_modules &gt; apollo &gt; node_modules \u4e0b\u6709\u4e00\u4e2a graphql \u6587\u4ef6\u5939\u3002<br \/>\n\u4f3c\u4e4e\u8fd9\u4e0e\u73b0\u6709\u7684\u67d0\u4e9b\u5185\u5bb9\u53d1\u751f\u4e86\u51b2\u7a81\u3002<br \/>\n\u6839\u636e\u9519\u8bef\u4fe1\u606f\u4e2d\u63d0\u53ca\u7684 &#8220;(\u4f7f\u7528 yarn) \u4f7f\u7528 resolutions&#8221; \u7684\u6307\u793a\uff0c\u6211\u5728 package.json \u4e2d\u6dfb\u52a0\u4e86\u4ee5\u4e0b\u5185\u5bb9\uff0c\u7136\u540e\u91cd\u65b0\u5b89\u88c5\u4e86 node_modules\uff0c\u9519\u8bef\u6210\u529f\u89e3\u51b3\u3002<br \/>\n\u5982\u679c\u6709\u53ef\u80fd\u53d1\u751f\u7c7b\u4f3c\u7684\u9519\u8bef\uff0c\u5efa\u8bae\u5728\u6267\u884c\u5b89\u88c5\u4e4b\u524d\u63d0\u524d\u6dfb\u52a0\u8fd9\u4e9b\u5185\u5bb9\u5230 package.json \u4e2d\u3002<\/p>\n<p>\u5982\u679c\u60a8\u4f7f\u7528npm\uff0c\u53ef\u80fd\u9700\u8981\u76f4\u63a5\u66f4\u6539\u7248\u672c\uff08\u4f5c\u8005\u672a\u7ecf\u5b9e\u9645\u6d4b\u8bd5\uff09\u3002<\/p>\n<pre class=\"post-pre\"><code><span class=\"dl\">\"<\/span><span class=\"s2\">resolutions<\/span><span class=\"dl\">\"<\/span><span class=\"p\">:<\/span> <span class=\"p\">{<\/span>\r\n  <span class=\"dl\">\"<\/span><span class=\"s2\">graphql<\/span><span class=\"dl\">\"<\/span><span class=\"p\">:<\/span> <span class=\"dl\">\"<\/span><span class=\"s2\">^14.5.8<\/span><span class=\"dl\">\"<\/span><span class=\"p\">,<\/span>\r\n  <span class=\"dl\">\"<\/span><span class=\"s2\">graphql-tag<\/span><span class=\"dl\">\"<\/span><span class=\"p\">:<\/span> <span class=\"dl\">\"<\/span><span class=\"s2\">^2.10.1<\/span><span class=\"dl\">\"<\/span>\r\n<span class=\"p\">},<\/span>\r\n<span class=\"c1\">\/\/ graphql-tag\u306e\u91cd\u8907\u30a8\u30e9\u30fc\u306f\u898b\u304b\u3051\u307e\u305b\u3093\u3067\u3057\u305f\u304c\u3001\u91cd\u8907\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u306f\u767a\u751f\u3057\u3066\u3044\u305f\u306e\u3067\u3064\u3044\u3067\u306b\u8ffd\u52a0\u3057\u307e\u3057\u305f\u3002<\/span>\r\n<\/code><\/pre>\n<p>\u5b8c\u6210\u9519\u8bef\u907f\u514d\u7684\u51c6\u5907\u540e\uff0c\u901a\u8fc7\u4ee5\u4e0b\u547d\u4ee4\u8fdb\u884c\u5b89\u88c5\u3002<\/p>\n<pre class=\"post-pre\"><code>yarn add <span class=\"nt\">-D<\/span> apollo\r\n\r\n<span class=\"c\"># OR<\/span>\r\n\r\nnpm <span class=\"nb\">install<\/span> <span class=\"nt\">-D<\/span> apollo\r\n<\/code><\/pre>\n<h1>\u51c6\u5907\u597dapollo.config.js<\/h1>\n<p>\u6309\u7167\u5b98\u65b9\u7f51\u7ad9\u7684\u8bf4\u660e\uff0c\u5728\u9879\u76ee\u7684\u6839\u76ee\u5f55\u51c6\u5907\u4e00\u4e2a\u540d\u4e3a\u300capollo.config.js\u300d\u7684\u6587\u4ef6\u3002<br \/>\n\u914d\u7f6eApollo\u9879\u76ee<br \/>\n\u8fd9\u6b21\uff0c\u6211\u4eec\u5c06\u4ece\u8fdc\u7a0b\u7ec8\u70b9\u83b7\u53d6\u6a21\u5f0f\u4fe1\u606f\u3002<\/p>\n<pre class=\"post-pre\"><code><span class=\"nx\">module<\/span><span class=\"p\">.<\/span><span class=\"nx\">exports<\/span> <span class=\"o\">=<\/span> <span class=\"p\">{<\/span>\r\n  <span class=\"na\">client<\/span><span class=\"p\">:<\/span> <span class=\"p\">{<\/span>\r\n    <span class=\"na\">name<\/span><span class=\"p\">:<\/span> <span class=\"dl\">'<\/span><span class=\"s1\">client<\/span><span class=\"dl\">'<\/span><span class=\"p\">,<\/span>\r\n    <span class=\"na\">includes<\/span><span class=\"p\">:<\/span> <span class=\"p\">[<\/span><span class=\"dl\">'<\/span><span class=\"s1\">src\/**\/*.ts<\/span><span class=\"dl\">'<\/span><span class=\"p\">],<\/span>\r\n    <span class=\"na\">tagName<\/span><span class=\"p\">:<\/span> <span class=\"dl\">'<\/span><span class=\"s1\">gql<\/span><span class=\"dl\">'<\/span><span class=\"p\">,<\/span>\r\n    <span class=\"na\">addTypename<\/span><span class=\"p\">:<\/span> <span class=\"kc\">true<\/span><span class=\"p\">,<\/span>\r\n    <span class=\"na\">service<\/span><span class=\"p\">:<\/span> <span class=\"p\">{<\/span>\r\n      <span class=\"c1\">\/\/ remote endpoint<\/span>\r\n      <span class=\"na\">name<\/span><span class=\"p\">:<\/span> <span class=\"dl\">'<\/span><span class=\"s1\">sever<\/span><span class=\"dl\">'<\/span><span class=\"p\">,<\/span>\r\n      <span class=\"na\">url<\/span><span class=\"p\">:<\/span> <span class=\"dl\">'<\/span><span class=\"s1\">https:\/\/server\/graphql<\/span><span class=\"dl\">'<\/span><span class=\"p\">,<\/span>\r\n      <span class=\"na\">headers<\/span><span class=\"p\">:<\/span> <span class=\"p\">{<\/span>\r\n        <span class=\"na\">authorization<\/span><span class=\"p\">:<\/span> <span class=\"dl\">'<\/span><span class=\"s1\">nanikashiranohituyounatoken...<\/span><span class=\"dl\">'<\/span><span class=\"p\">,<\/span>\r\n      <span class=\"p\">},<\/span>\r\n    <span class=\"p\">},<\/span>\r\n  <span class=\"p\">},<\/span>\r\n<span class=\"p\">};<\/span>\r\n<\/code><\/pre>\n<p>tagName\u662f\u4e00\u4e2a\u51fd\u6570\u540d\uff0c\u7528\u4e8e\u4f20\u9012GraphQL\u67e5\u8be2\u7684\u6a21\u677f\u5b57\u9762\u91cf\u3002\uff08\u9ed8\u8ba4\u503c\u4e3agql\uff09<br \/>\n\u5728\u4e0a\u8ff0\u60c5\u51b5\u4e2d\uff0c\u5728.ts\u6587\u4ef6\u7684src\u76ee\u5f55\u4e0b\uff0c\u6307\u793a\u5728gql\u51fd\u6570\u7684\u53c2\u6570\u503c\u4e2d\u5f15\u7528\u6a21\u677f\u5b57\u9762\u91cf\u3002<br \/>\n\u6b64\u5916\uff0caddTypename\u9009\u9879\u7528\u4e8e\u5728\u751f\u6210\u7c7b\u578b\u5b9a\u4e49\u6587\u4ef6\u65f6\u6dfb\u52a0Schema\u4e2d\u5b9a\u4e49\u7684\u7c7b\u578b\u540d\u79f0\u3002\uff08\u9ed8\u8ba4\u503c\u4e3atrue\uff09<\/p>\n<p>\u6211\u5728\u5ba2\u6237\u7aef\u7684\u670d\u52a1\u4e2d\u6307\u5b9a\u4e86\u5f15\u7528\u7684\u670d\u52a1\u5668\u3002<\/p>\n<h1>\u751f\u6210\u5e76\u6267\u884c\u7c7b\u578b\u5b9a\u4e49<\/h1>\n<p>\u8bf7\u5728 package.json \u4e2d\u6dfb\u52a0 script \u5e76\u6267\u884c\u3002<br \/>\n\u6709\u5404\u79cd\u9009\u9879\u53ef\u4f9b\u9009\u62e9\u3002<br \/>\n\u8bf7\u8bbf\u95ee https:\/\/github.com\/apollographql\/apollo-tooling#apollo-clientcodegen-output\u3002<\/p>\n<p>\u5728\u4e2d\u6587\u4e2d\u7684\u672c\u5730\u5316\u7684\u7ffb\u8bd1\u53ef\u4ee5\u662f\uff1a<br \/>\n&#8220;apollo client:codegen [OPTIONS] [OUTPUT]&#8221; \u662f\u7528\u4e8e\u5b9a\u4e49\u8f93\u51fa\u547d\u4ee4\u7684\u6307\u4ee4\u3002<br \/>\n&#8220;[OUTPUT]&#8221; \u662f\u6307\u8f93\u51fa\u6587\u4ef6\u7684\u8def\u5f84\u3002\u5982\u679c\u6ca1\u6709\u7279\u6b8a\u6307\u5b9a\uff0c\u5219\u4f1a\u5728\u539f\u59cb\u6587\u4ef6\u6240\u5728\u7684\u76ee\u5f55\u4e0b\u751f\u6210\u4e00\u4e2a\u540d\u4e3a &#8220;__generated__&#8221; \u7684\u6587\u4ef6\u5939\uff0c\u5e76\u4e14\u4e3a\u6bcf\u4e2a\u67e5\u8be2\u751f\u6210\u4e00\u4e2a\u5b9a\u4e49\u6587\u4ef6\u3002<br \/>\n\u5728\u6b64\u8fc7\u7a0b\u4e2d\uff0c\u5982\u679c\u67e5\u8be2\u540d\u79f0\u91cd\u590d\uff0c\u5219\u4f1a\u5bfc\u81f4\u9519\u8bef\u3002<\/p>\n<pre class=\"post-pre\"><code><span class=\"nl\">\"scripts\"<\/span><span class=\"p\">:<\/span> <span class=\"p\">{<\/span>\r\n  <span class=\"nl\">\"apollo:codegen\"<\/span><span class=\"p\">:<\/span> <span class=\"s2\">\"apollo client:codegen --target=typescript --globalTypesFile=src\/types\/globalTypes.ts\"<\/span>\r\n<span class=\"p\">}<\/span>\r\n<\/code><\/pre>\n<p>\u9664\u4e86TypeScript\u4e4b\u5916\uff0c\u8fd8\u652f\u6301Swift\u3001Flow\u548cScala\uff0c\u56e0\u6b64\u5728&#8211;target=typescript\u4e2d\u660e\u786e\u4e86\u8be5\u9009\u9879\u3002<br \/>\n\u7531\u4e8e\u5171\u4eab\u7684\u7c7b\u578b\u5b9a\u4e49\u6587\u4ef6\uff08globalTypesFile\uff09\u5728\u751f\u6210\u65f6\u662f\u653e\u5728\u6839\u6587\u4ef6\u5939\u4e2d\uff08\/__generated__\/globalTypes.ts\uff09\uff0c\u6240\u4ee5\u5c06\u5176\u6307\u5b9a\u5230\/src\/types\/\u6587\u4ef6\u5939\u4e0b\u3002<\/p>\n<h2>\u8bf7\u63d0\u524d\u4e0b\u8f7dSchema\u6587\u4ef6\u3002<\/h2>\n<p>\u5982\u679c\u6bcf\u6b21\u670d\u52a1\u5668\u8bbf\u95ee\u65f6\u4ee4\u724c\u8fc7\u671f\u65f6\u95f4\u5f88\u77ed\u7b49\u7b49\u9ebb\u70e6\u7684\u60c5\u51b5\u4e0b\uff0c\u60a8\u53ef\u4ee5\u4e8b\u5148\u5c06\u5176\u4e0b\u8f7d\u5230\u672c\u5730\u3002<\/p>\n<pre class=\"post-pre\"><code><span class=\"nl\">\"scripts\"<\/span><span class=\"p\">:<\/span> <span class=\"p\">{<\/span>\r\n  <span class=\"nl\">\"apollo:download\"<\/span><span class=\"p\">:<\/span> <span class=\"s2\">\"apollo client:download-schema src\/type\/schema.json\"<\/span><span class=\"p\">,<\/span>\r\n  <span class=\"nl\">\"apollo:codegen\"<\/span><span class=\"p\">:<\/span> <span class=\"s2\">\"apollo client:codegen --target=typescript --localSchemaFile=src\/type\/schema.json\"<\/span>\r\n<span class=\"p\">}<\/span>\r\n<\/code><\/pre>\n<p>\u963f\u6ce2\u7f57\uff08Apollo\uff09\uff1a\u5728\u4f7f\u7528apollo:download\u547d\u4ee4\u4e0b\u8f7d\u540e\u4fdd\u5b58\u5230src\/type\/schema.json\u6587\u4ef6\u4e2d\uff0c\u5728\u6267\u884capollo:codegen\u547d\u4ee4\u65f6\u4f1a\u5f15\u7528\u8be5\u6587\u4ef6\u3002<\/p>\n<h1>\u81ea\u5b9a\u4e49\u6807\u91cf\u7684\u517c\u5bb9\u6027<\/h1>\n<p>\u5982\u679c\u81ea\u5b9a\u4e49\u6807\u91cf\uff08Custom Scalar\uff09\u88ab\u72ec\u7acb\u5b9a\u4e49\u4e86\u7c7b\u578b\uff08\u4f8b\u5982\u65e5\u671f\uff09\uff0c\u9ed8\u8ba4\u60c5\u51b5\u4e0b\u4f1a\u53d8\u6210\u4efb\u610f\u7c7b\u578b\uff08any\uff09\u3002<br \/>\n\u5982\u679c\u5728apollo:codegen\u7684\u9009\u9879\u4e2d\u4f7f\u7528&#8211;passthroughCustomScalars\u53c2\u6570\uff0c\u90a3\u4e48Custom Scalar\u7684\u540d\u79f0\u5c06\u539f\u6837\u8f93\u51fa\u3002<\/p>\n<p>\u7136\u800c\uff0c\u7531\u4e8eglobalTypesFile\u4e2d\u5e76\u672a\u5b9a\u4e49\u76f8\u5e94\u7684\u7c7b\u578b\uff0c\u56e0\u6b64\u60a8\u9700\u8981\u63d0\u524d\u51c6\u5907\u597d\u81ea\u5df1\u7684\u7c7b\u578b\u3002<\/p>\n<pre class=\"post-pre\"><code><span class=\"c1\">\/\/ \u65e5\u4ed8\u578b\u306e Custom Scalar \u306e\u540d\u524d\u304c GqlDate \u306e\u5834\u5408<\/span>\r\n<span class=\"kr\">declare<\/span> <span class=\"nb\">global<\/span> <span class=\"p\">{<\/span>\r\n  <span class=\"kd\">type<\/span> <span class=\"nx\">GqlDate<\/span> <span class=\"o\">=<\/span> <span class=\"nb\">Date<\/span><span class=\"p\">;<\/span>\r\n<span class=\"p\">}<\/span>\r\n<\/code><\/pre>\n<p>\u800c\u4e14\uff0c\u5b9e\u9645\u63a5\u53d7\u5230\u7684\u6570\u636e\u5e76\u4e0d\u4f1a\u88ab\u8f6c\u6362\u6210Date\u7c7b\u578b\uff0c\u6240\u4ee5\u9700\u8981\u5355\u72ec\u8fdb\u884c\u6570\u636e\u7c7b\u578b\u8f6c\u6362\u5904\u7406\u3002<\/p>\n<pre class=\"post-pre\"><code><span class=\"c1\">\/\/ \u300cGqlDate\u300d\u304c\u3001\u300cISO 8601\u300d\u5f62\u5f0f\u306e\u6587\u5b57\u5217\u578b\u3067\u9001\u4fe1\u3055\u308c\u308b\u3068\u3057\u305f\u5834\u5408<\/span>\r\n\r\n<span class=\"c1\">\/\/ GqlDate\uff08ISO 8601\uff09\u5224\u5b9a<\/span>\r\n<span class=\"k\">export<\/span> <span class=\"kd\">const<\/span> <span class=\"nx\">isGqlDate<\/span> <span class=\"o\">=<\/span> <span class=\"p\">(<\/span><span class=\"nx\">arg<\/span><span class=\"p\">:<\/span> <span class=\"kr\">any<\/span><span class=\"p\">):<\/span> <span class=\"nx\">arg<\/span> <span class=\"k\">is<\/span> <span class=\"nx\">GqlDate<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"p\">{<\/span>\r\n  <span class=\"k\">return<\/span> <span class=\"p\">(<\/span>\r\n    <span class=\"k\">typeof<\/span> <span class=\"nx\">arg<\/span> <span class=\"o\">===<\/span> <span class=\"dl\">'<\/span><span class=\"s1\">string<\/span><span class=\"dl\">'<\/span> <span class=\"o\">&amp;&amp;<\/span>\r\n    <span class=\"sr\">\/^<\/span><span class=\"se\">\\d{4}(<\/span><span class=\"sr\">-<\/span><span class=\"se\">\\d\\d){2}<\/span><span class=\"sr\">T<\/span><span class=\"se\">\\d{2}(<\/span><span class=\"sr\">:<\/span><span class=\"se\">\\d\\d){2}<\/span><span class=\"sr\">.<\/span><span class=\"se\">\\d{2,3}<\/span><span class=\"sr\">Z$\/<\/span><span class=\"p\">.<\/span><span class=\"nx\">test<\/span><span class=\"p\">(<\/span><span class=\"nx\">arg<\/span><span class=\"p\">)<\/span>\r\n  <span class=\"p\">);<\/span>\r\n<span class=\"p\">};<\/span>\r\n\r\n<span class=\"c1\">\/\/ GqlDate\u6587\u5b57\u5217\u3092Date\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u306b\u5909\u63db<\/span>\r\n<span class=\"k\">export<\/span> <span class=\"kd\">const<\/span> <span class=\"nx\">convertGqlDateToDate<\/span> <span class=\"o\">=<\/span> <span class=\"o\">&lt;<\/span><span class=\"nx\">T<\/span> <span class=\"kd\">extends<\/span> <span class=\"nb\">Object<\/span> <span class=\"o\">=<\/span> <span class=\"p\">{}<\/span><span class=\"o\">&gt;<\/span><span class=\"p\">(<\/span><span class=\"nx\">arg<\/span><span class=\"p\">:<\/span> <span class=\"nx\">T<\/span><span class=\"p\">):<\/span> <span class=\"nx\">T<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"p\">{<\/span>\r\n  <span class=\"kd\">let<\/span> <span class=\"na\">res<\/span><span class=\"p\">:<\/span> <span class=\"p\">{<\/span> <span class=\"p\">[<\/span><span class=\"na\">key<\/span><span class=\"p\">:<\/span> <span class=\"kr\">string<\/span><span class=\"p\">]:<\/span> <span class=\"kr\">any<\/span> <span class=\"p\">}<\/span> <span class=\"o\">=<\/span> <span class=\"p\">{};<\/span>\r\n\r\n  <span class=\"k\">for<\/span> <span class=\"p\">(<\/span><span class=\"kd\">const<\/span> <span class=\"p\">[<\/span><span class=\"nx\">key<\/span><span class=\"p\">,<\/span> <span class=\"nx\">value<\/span><span class=\"p\">]<\/span> <span class=\"k\">of<\/span> <span class=\"nb\">Object<\/span><span class=\"p\">.<\/span><span class=\"nx\">entries<\/span><span class=\"p\">(<\/span><span class=\"nx\">arg<\/span><span class=\"p\">))<\/span> <span class=\"p\">{<\/span>\r\n    <span class=\"k\">if<\/span> <span class=\"p\">(<\/span><span class=\"nx\">isGqlDate<\/span><span class=\"p\">(<\/span><span class=\"nx\">value<\/span><span class=\"p\">))<\/span> <span class=\"p\">{<\/span>\r\n      <span class=\"nx\">res<\/span><span class=\"p\">[<\/span><span class=\"nx\">key<\/span><span class=\"p\">]<\/span> <span class=\"o\">=<\/span> <span class=\"k\">new<\/span> <span class=\"nb\">Date<\/span><span class=\"p\">(<\/span><span class=\"nx\">value<\/span><span class=\"p\">);<\/span>\r\n    <span class=\"p\">}<\/span> <span class=\"k\">else<\/span> <span class=\"k\">if<\/span> <span class=\"p\">(<\/span><span class=\"nb\">Object<\/span><span class=\"p\">.<\/span><span class=\"nx\">prototype<\/span><span class=\"p\">.<\/span><span class=\"nx\">toString<\/span><span class=\"p\">.<\/span><span class=\"nx\">call<\/span><span class=\"p\">(<\/span><span class=\"nx\">value<\/span><span class=\"p\">)<\/span> <span class=\"o\">===<\/span> <span class=\"dl\">'<\/span><span class=\"s1\">[object Object]<\/span><span class=\"dl\">'<\/span><span class=\"p\">)<\/span> <span class=\"p\">{<\/span>\r\n      <span class=\"nx\">res<\/span><span class=\"p\">[<\/span><span class=\"nx\">key<\/span><span class=\"p\">]<\/span> <span class=\"o\">=<\/span> <span class=\"nx\">convertGqlDateToDate<\/span><span class=\"p\">(<\/span><span class=\"nx\">value<\/span><span class=\"p\">);<\/span>\r\n    <span class=\"p\">}<\/span> <span class=\"k\">else<\/span> <span class=\"k\">if<\/span> <span class=\"p\">(<\/span><span class=\"nb\">Array<\/span><span class=\"p\">.<\/span><span class=\"nx\">isArray<\/span><span class=\"p\">(<\/span><span class=\"nx\">value<\/span><span class=\"p\">))<\/span> <span class=\"p\">{<\/span>\r\n      <span class=\"c1\">\/\/ GqlDate[] \u306b\u306f\u5bfe\u5fdc\u3057\u3066\u3044\u306a\u3044\u2026\u2026<\/span>\r\n      <span class=\"nx\">res<\/span><span class=\"p\">[<\/span><span class=\"nx\">key<\/span><span class=\"p\">]<\/span> <span class=\"o\">=<\/span> <span class=\"nx\">value<\/span><span class=\"p\">.<\/span><span class=\"nx\">map<\/span><span class=\"p\">(<\/span><span class=\"nx\">item<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"p\">{<\/span>\r\n        <span class=\"k\">if<\/span> <span class=\"p\">(<\/span><span class=\"nb\">Object<\/span><span class=\"p\">.<\/span><span class=\"nx\">prototype<\/span><span class=\"p\">.<\/span><span class=\"nx\">toString<\/span><span class=\"p\">.<\/span><span class=\"nx\">call<\/span><span class=\"p\">(<\/span><span class=\"nx\">value<\/span><span class=\"p\">)<\/span> <span class=\"o\">===<\/span> <span class=\"dl\">'<\/span><span class=\"s1\">[object Object]<\/span><span class=\"dl\">'<\/span><span class=\"p\">)<\/span> <span class=\"p\">{<\/span>\r\n          <span class=\"k\">return<\/span> <span class=\"nx\">convertGqlDateToDate<\/span><span class=\"p\">(<\/span><span class=\"nx\">item<\/span><span class=\"p\">);<\/span>\r\n        <span class=\"p\">}<\/span>\r\n        <span class=\"k\">return<\/span> <span class=\"nx\">item<\/span><span class=\"p\">;<\/span>\r\n      <span class=\"p\">});<\/span>\r\n    <span class=\"p\">}<\/span> <span class=\"k\">else<\/span> <span class=\"p\">{<\/span>\r\n      <span class=\"nx\">res<\/span><span class=\"p\">[<\/span><span class=\"nx\">key<\/span><span class=\"p\">]<\/span> <span class=\"o\">=<\/span> <span class=\"nx\">value<\/span><span class=\"p\">;<\/span>\r\n    <span class=\"p\">}<\/span>\r\n  <span class=\"p\">}<\/span>\r\n  <span class=\"k\">return<\/span> <span class=\"nx\">res<\/span> <span class=\"k\">as<\/span> <span class=\"nx\">T<\/span><span class=\"p\">;<\/span>\r\n<span class=\"p\">};<\/span>\r\n\r\n<span class=\"c1\">\/\/ Date\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u3092GqlDate\uff08ISO 8601\uff09\u306b\u5909\u63db<\/span>\r\n<span class=\"k\">export<\/span> <span class=\"kd\">const<\/span> <span class=\"nx\">convertDateToGqlDate<\/span> <span class=\"o\">=<\/span> <span class=\"o\">&lt;<\/span><span class=\"nx\">T<\/span> <span class=\"kd\">extends<\/span> <span class=\"nb\">Object<\/span> <span class=\"o\">=<\/span> <span class=\"p\">{}<\/span><span class=\"o\">&gt;<\/span><span class=\"p\">(<\/span><span class=\"nx\">arg<\/span><span class=\"p\">:<\/span> <span class=\"nx\">T<\/span><span class=\"p\">):<\/span> <span class=\"nx\">T<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"p\">{<\/span>\r\n  <span class=\"kd\">let<\/span> <span class=\"na\">res<\/span><span class=\"p\">:<\/span> <span class=\"p\">{<\/span> <span class=\"p\">[<\/span><span class=\"na\">key<\/span><span class=\"p\">:<\/span> <span class=\"kr\">string<\/span><span class=\"p\">]:<\/span> <span class=\"kr\">any<\/span> <span class=\"p\">}<\/span> <span class=\"o\">=<\/span> <span class=\"p\">{};<\/span>\r\n\r\n  <span class=\"c1\">\/\/ ...\u7565<\/span>\r\n\r\n  <span class=\"k\">return<\/span> <span class=\"nx\">res<\/span> <span class=\"k\">as<\/span> <span class=\"nx\">T<\/span><span class=\"p\">;<\/span>\r\n<span class=\"p\">};<\/span>\r\n\r\n<span class=\"c1\">\/\/ variables\u3068onCompleted\u3067\u5909\u63db\u51e6\u7406\u3092\u631f\u3080<\/span>\r\n\r\n<span class=\"kd\">const<\/span> <span class=\"p\">[<\/span><span class=\"nx\">state<\/span><span class=\"p\">,<\/span> <span class=\"nx\">setState<\/span><span class=\"p\">]<\/span> <span class=\"o\">=<\/span> <span class=\"nx\">useState<\/span><span class=\"o\">&lt;<\/span><span class=\"nx\">StateType<\/span> <span class=\"o\">|<\/span> <span class=\"kc\">null<\/span><span class=\"o\">&gt;<\/span><span class=\"p\">(<\/span><span class=\"kc\">null<\/span><span class=\"p\">);<\/span>\r\n\r\n<span class=\"kd\">const<\/span> <span class=\"p\">{<\/span><span class=\"nx\">loading<\/span><span class=\"p\">,<\/span> <span class=\"nx\">error<\/span><span class=\"p\">}<\/span> <span class=\"o\">=<\/span> <span class=\"nx\">useQuery<\/span><span class=\"o\">&lt;<\/span><span class=\"nx\">ResultType<\/span><span class=\"p\">,<\/span> <span class=\"nx\">VariablesType<\/span><span class=\"o\">&gt;<\/span><span class=\"p\">(<\/span>\r\n  <span class=\"nx\">ANY_QUERY<\/span><span class=\"p\">,<\/span>\r\n  <span class=\"p\">{<\/span>\r\n    <span class=\"na\">variables<\/span><span class=\"p\">:<\/span> <span class=\"nx\">convertDateToGqlDate<\/span><span class=\"o\">&lt;<\/span><span class=\"nx\">VariablesType<\/span><span class=\"o\">&gt;<\/span><span class=\"p\">(<\/span><span class=\"nx\">anyData<\/span><span class=\"p\">),<\/span>\r\n    <span class=\"nx\">onCompleted<\/span><span class=\"p\">(<\/span><span class=\"nx\">result<\/span><span class=\"p\">)<\/span> <span class=\"p\">{<\/span>\r\n      <span class=\"nx\">setState<\/span><span class=\"p\">(<\/span>\r\n        <span class=\"nx\">convertGqlDateToDate<\/span><span class=\"o\">&lt;<\/span><span class=\"nx\">StateType<\/span><span class=\"o\">&gt;<\/span><span class=\"p\">(<\/span><span class=\"nx\">result<\/span><span class=\"p\">.<\/span><span class=\"nx\">something<\/span><span class=\"p\">)<\/span>\r\n      <span class=\"p\">);<\/span>\r\n    <span class=\"p\">},<\/span>\r\n  <span class=\"p\">},<\/span>\r\n<span class=\"p\">);<\/span>\r\n\r\n<\/code><\/pre>\n<p>\u5173\u4e8e\u5728Apollo Client\u4e2d\u5f15\u5165\u81ea\u5b9a\u4e49\u6807\u91cf\uff0c\u4f3c\u4e4e\u6709\u4eba\u6b63\u5728\u521b\u5efa\u5e93\u3002<br \/>\n\u6b63\u5f0f\u5f15\u5165\u8fd8\u9700\u8981\u4e9b\u65f6\u95f4\u5427\u3002\u3002\u3002<\/p>\n<h1>\u8bf7\u63d0\u4f9b\u76f8\u5173\u4fe1\u606f<\/h1>\n<p>\u4f7f\u7528Apollo Codegen\u81ea\u52a8\u4e3aGraphQL\u67e5\u8be2\u751f\u6210TypeScript\u5b9a\u4e49<br \/>\n\u4e3aGraphQL\u6570\u636e\u4f7f\u7528TypeScript\u548cApollo Client\u751f\u6210\u7c7b\u578b<br \/>\n\u4f7f\u7528Apollo\u5de5\u5177\u81ea\u52a8\u751f\u6210TypeScript\u5ba2\u6237\u7aef\u7684\u7c7b\u578b\u5b9a\u4e49<\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u4e3a\u4e86\u51cf\u5c11\u5728\u4f7f\u7528TypeScript\u65f6\u5728GraphQL\uff08Apollo Client\uff09\u4e2d\u7684\u7e41\u7410\u5de5\u4f5c\uff0c\u6211\u4eec\u53ef\u4ee5\u4f7f\u7528A [&hellip;]<\/p>\n","protected":false},"author":12,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[],"class_list":["post-48247","post","type-post","status-publish","format-standard","hentry","category-uncategorized"],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v21.5 (Yoast SEO v21.5) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>\u4f7f\u7528Apollo CLI\u53ef\u4ee5\u4eceGraphQL\u6a21\u5f0f\u81ea\u52a8\u751f\u6210TypeScript\u7c7b\u578b\u5b9a\u4e49 - Blog - Silicon Cloud<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.silicloud.com\/zh\/blog\/\u4f7f\u7528apollo-cli\u53ef\u4ee5\u4ecegraphql\u6a21\u5f0f\u81ea\u52a8\u751f\u6210typescript\u7c7b\u578b\u5b9a\u4e49\u3002\/\" \/>\n<meta property=\"og:locale\" content=\"zh_CN\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"\u4f7f\u7528Apollo CLI\u53ef\u4ee5\u4eceGraphQL\u6a21\u5f0f\u81ea\u52a8\u751f\u6210TypeScript\u7c7b\u578b\u5b9a\u4e49\" \/>\n<meta property=\"og:description\" content=\"\u4e3a\u4e86\u51cf\u5c11\u5728\u4f7f\u7528TypeScript\u65f6\u5728GraphQL\uff08Apollo Client\uff09\u4e2d\u7684\u7e41\u7410\u5de5\u4f5c\uff0c\u6211\u4eec\u53ef\u4ee5\u4f7f\u7528A [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.silicloud.com\/zh\/blog\/\u4f7f\u7528apollo-cli\u53ef\u4ee5\u4ecegraphql\u6a21\u5f0f\u81ea\u52a8\u751f\u6210typescript\u7c7b\u578b\u5b9a\u4e49\u3002\/\" \/>\n<meta property=\"og:site_name\" content=\"Blog - Silicon Cloud\" \/>\n<meta property=\"article:published_time\" content=\"2023-07-04T23:20:49+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2024-04-28T22:15:05+00:00\" \/>\n<meta name=\"author\" content=\"\u9038, \u79d1\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"\u4f5c\u8005\" \/>\n\t<meta name=\"twitter:data1\" content=\"\u9038, \u79d1\" \/>\n\t<meta name=\"twitter:label2\" content=\"\u9884\u8ba1\u9605\u8bfb\u65f6\u95f4\" \/>\n\t<meta name=\"twitter:data2\" content=\"2 \u5206\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/%e4%bd%bf%e7%94%a8apollo-cli%e5%8f%af%e4%bb%a5%e4%bb%8egraphql%e6%a8%a1%e5%bc%8f%e8%87%aa%e5%8a%a8%e7%94%9f%e6%88%90typescript%e7%b1%bb%e5%9e%8b%e5%ae%9a%e4%b9%89%e3%80%82\/\",\"url\":\"https:\/\/www.silicloud.com\/zh\/blog\/%e4%bd%bf%e7%94%a8apollo-cli%e5%8f%af%e4%bb%a5%e4%bb%8egraphql%e6%a8%a1%e5%bc%8f%e8%87%aa%e5%8a%a8%e7%94%9f%e6%88%90typescript%e7%b1%bb%e5%9e%8b%e5%ae%9a%e4%b9%89%e3%80%82\/\",\"name\":\"\u4f7f\u7528Apollo CLI\u53ef\u4ee5\u4eceGraphQL\u6a21\u5f0f\u81ea\u52a8\u751f\u6210TypeScript\u7c7b\u578b\u5b9a\u4e49 - Blog - Silicon Cloud\",\"isPartOf\":{\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/#website\"},\"datePublished\":\"2023-07-04T23:20:49+00:00\",\"dateModified\":\"2024-04-28T22:15:05+00:00\",\"author\":{\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/#\/schema\/person\/85c1dae56e6ea1e695c73d33c684d487\"},\"breadcrumb\":{\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/%e4%bd%bf%e7%94%a8apollo-cli%e5%8f%af%e4%bb%a5%e4%bb%8egraphql%e6%a8%a1%e5%bc%8f%e8%87%aa%e5%8a%a8%e7%94%9f%e6%88%90typescript%e7%b1%bb%e5%9e%8b%e5%ae%9a%e4%b9%89%e3%80%82\/#breadcrumb\"},\"inLanguage\":\"zh-Hans\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.silicloud.com\/zh\/blog\/%e4%bd%bf%e7%94%a8apollo-cli%e5%8f%af%e4%bb%a5%e4%bb%8egraphql%e6%a8%a1%e5%bc%8f%e8%87%aa%e5%8a%a8%e7%94%9f%e6%88%90typescript%e7%b1%bb%e5%9e%8b%e5%ae%9a%e4%b9%89%e3%80%82\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/%e4%bd%bf%e7%94%a8apollo-cli%e5%8f%af%e4%bb%a5%e4%bb%8egraphql%e6%a8%a1%e5%bc%8f%e8%87%aa%e5%8a%a8%e7%94%9f%e6%88%90typescript%e7%b1%bb%e5%9e%8b%e5%ae%9a%e4%b9%89%e3%80%82\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"\u9996\u9875\",\"item\":\"https:\/\/www.silicloud.com\/zh\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"\u4f7f\u7528Apollo CLI\u53ef\u4ee5\u4eceGraphQL\u6a21\u5f0f\u81ea\u52a8\u751f\u6210TypeScript\u7c7b\u578b\u5b9a\u4e49\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/#website\",\"url\":\"https:\/\/www.silicloud.com\/zh\/blog\/\",\"name\":\"Blog - Silicon Cloud\",\"description\":\"\",\"inLanguage\":\"zh-Hans\"},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/#\/schema\/person\/85c1dae56e6ea1e695c73d33c684d487\",\"name\":\"\u9038, \u79d1\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"zh-Hans\",\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/c94f6d9cbbfbca863fab309840bd690c153c95f8490c290ad2ed54dd693dad16?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/c94f6d9cbbfbca863fab309840bd690c153c95f8490c290ad2ed54dd693dad16?s=96&d=mm&r=g\",\"caption\":\"\u9038, \u79d1\"},\"url\":\"https:\/\/www.silicloud.com\/zh\/blog\/author\/keyi\/\"},{\"@type\":\"ImageObject\",\"inLanguage\":\"zh-Hans\",\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/%e4%bd%bf%e7%94%a8apollo-cli%e5%8f%af%e4%bb%a5%e4%bb%8egraphql%e6%a8%a1%e5%bc%8f%e8%87%aa%e5%8a%a8%e7%94%9f%e6%88%90typescript%e7%b1%bb%e5%9e%8b%e5%ae%9a%e4%b9%89%e3%80%82\/#local-main-organization-logo\",\"url\":\"\",\"contentUrl\":\"\",\"caption\":\"Blog - Silicon Cloud\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"\u4f7f\u7528Apollo CLI\u53ef\u4ee5\u4eceGraphQL\u6a21\u5f0f\u81ea\u52a8\u751f\u6210TypeScript\u7c7b\u578b\u5b9a\u4e49 - Blog - Silicon Cloud","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.silicloud.com\/zh\/blog\/\u4f7f\u7528apollo-cli\u53ef\u4ee5\u4ecegraphql\u6a21\u5f0f\u81ea\u52a8\u751f\u6210typescript\u7c7b\u578b\u5b9a\u4e49\u3002\/","og_locale":"zh_CN","og_type":"article","og_title":"\u4f7f\u7528Apollo CLI\u53ef\u4ee5\u4eceGraphQL\u6a21\u5f0f\u81ea\u52a8\u751f\u6210TypeScript\u7c7b\u578b\u5b9a\u4e49","og_description":"\u4e3a\u4e86\u51cf\u5c11\u5728\u4f7f\u7528TypeScript\u65f6\u5728GraphQL\uff08Apollo Client\uff09\u4e2d\u7684\u7e41\u7410\u5de5\u4f5c\uff0c\u6211\u4eec\u53ef\u4ee5\u4f7f\u7528A [&hellip;]","og_url":"https:\/\/www.silicloud.com\/zh\/blog\/\u4f7f\u7528apollo-cli\u53ef\u4ee5\u4ecegraphql\u6a21\u5f0f\u81ea\u52a8\u751f\u6210typescript\u7c7b\u578b\u5b9a\u4e49\u3002\/","og_site_name":"Blog - Silicon Cloud","article_published_time":"2023-07-04T23:20:49+00:00","article_modified_time":"2024-04-28T22:15:05+00:00","author":"\u9038, \u79d1","twitter_card":"summary_large_image","twitter_misc":{"\u4f5c\u8005":"\u9038, \u79d1","\u9884\u8ba1\u9605\u8bfb\u65f6\u95f4":"2 \u5206"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/www.silicloud.com\/zh\/blog\/%e4%bd%bf%e7%94%a8apollo-cli%e5%8f%af%e4%bb%a5%e4%bb%8egraphql%e6%a8%a1%e5%bc%8f%e8%87%aa%e5%8a%a8%e7%94%9f%e6%88%90typescript%e7%b1%bb%e5%9e%8b%e5%ae%9a%e4%b9%89%e3%80%82\/","url":"https:\/\/www.silicloud.com\/zh\/blog\/%e4%bd%bf%e7%94%a8apollo-cli%e5%8f%af%e4%bb%a5%e4%bb%8egraphql%e6%a8%a1%e5%bc%8f%e8%87%aa%e5%8a%a8%e7%94%9f%e6%88%90typescript%e7%b1%bb%e5%9e%8b%e5%ae%9a%e4%b9%89%e3%80%82\/","name":"\u4f7f\u7528Apollo CLI\u53ef\u4ee5\u4eceGraphQL\u6a21\u5f0f\u81ea\u52a8\u751f\u6210TypeScript\u7c7b\u578b\u5b9a\u4e49 - Blog - Silicon Cloud","isPartOf":{"@id":"https:\/\/www.silicloud.com\/zh\/blog\/#website"},"datePublished":"2023-07-04T23:20:49+00:00","dateModified":"2024-04-28T22:15:05+00:00","author":{"@id":"https:\/\/www.silicloud.com\/zh\/blog\/#\/schema\/person\/85c1dae56e6ea1e695c73d33c684d487"},"breadcrumb":{"@id":"https:\/\/www.silicloud.com\/zh\/blog\/%e4%bd%bf%e7%94%a8apollo-cli%e5%8f%af%e4%bb%a5%e4%bb%8egraphql%e6%a8%a1%e5%bc%8f%e8%87%aa%e5%8a%a8%e7%94%9f%e6%88%90typescript%e7%b1%bb%e5%9e%8b%e5%ae%9a%e4%b9%89%e3%80%82\/#breadcrumb"},"inLanguage":"zh-Hans","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.silicloud.com\/zh\/blog\/%e4%bd%bf%e7%94%a8apollo-cli%e5%8f%af%e4%bb%a5%e4%bb%8egraphql%e6%a8%a1%e5%bc%8f%e8%87%aa%e5%8a%a8%e7%94%9f%e6%88%90typescript%e7%b1%bb%e5%9e%8b%e5%ae%9a%e4%b9%89%e3%80%82\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.silicloud.com\/zh\/blog\/%e4%bd%bf%e7%94%a8apollo-cli%e5%8f%af%e4%bb%a5%e4%bb%8egraphql%e6%a8%a1%e5%bc%8f%e8%87%aa%e5%8a%a8%e7%94%9f%e6%88%90typescript%e7%b1%bb%e5%9e%8b%e5%ae%9a%e4%b9%89%e3%80%82\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"\u9996\u9875","item":"https:\/\/www.silicloud.com\/zh\/blog\/"},{"@type":"ListItem","position":2,"name":"\u4f7f\u7528Apollo CLI\u53ef\u4ee5\u4eceGraphQL\u6a21\u5f0f\u81ea\u52a8\u751f\u6210TypeScript\u7c7b\u578b\u5b9a\u4e49"}]},{"@type":"WebSite","@id":"https:\/\/www.silicloud.com\/zh\/blog\/#website","url":"https:\/\/www.silicloud.com\/zh\/blog\/","name":"Blog - Silicon Cloud","description":"","inLanguage":"zh-Hans"},{"@type":"Person","@id":"https:\/\/www.silicloud.com\/zh\/blog\/#\/schema\/person\/85c1dae56e6ea1e695c73d33c684d487","name":"\u9038, \u79d1","image":{"@type":"ImageObject","inLanguage":"zh-Hans","@id":"https:\/\/www.silicloud.com\/zh\/blog\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/c94f6d9cbbfbca863fab309840bd690c153c95f8490c290ad2ed54dd693dad16?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/c94f6d9cbbfbca863fab309840bd690c153c95f8490c290ad2ed54dd693dad16?s=96&d=mm&r=g","caption":"\u9038, \u79d1"},"url":"https:\/\/www.silicloud.com\/zh\/blog\/author\/keyi\/"},{"@type":"ImageObject","inLanguage":"zh-Hans","@id":"https:\/\/www.silicloud.com\/zh\/blog\/%e4%bd%bf%e7%94%a8apollo-cli%e5%8f%af%e4%bb%a5%e4%bb%8egraphql%e6%a8%a1%e5%bc%8f%e8%87%aa%e5%8a%a8%e7%94%9f%e6%88%90typescript%e7%b1%bb%e5%9e%8b%e5%ae%9a%e4%b9%89%e3%80%82\/#local-main-organization-logo","url":"","contentUrl":"","caption":"Blog - Silicon Cloud"}]}},"_links":{"self":[{"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/posts\/48247","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/users\/12"}],"replies":[{"embeddable":true,"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/comments?post=48247"}],"version-history":[{"count":2,"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/posts\/48247\/revisions"}],"predecessor-version":[{"id":83544,"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/posts\/48247\/revisions\/83544"}],"wp:attachment":[{"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/media?parent=48247"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/categories?post=48247"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/tags?post=48247"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}