TypeScript 配置
TypeScript 配置
您可以在 generators.yml 中自定义 TypeScript SDK 生成器的行为:
allowExtraFields
允许对象模式中未定义的字段。这仅适用于序列化。
更多信息请参见 TypeScript 序列化层。
defaultTimeoutInSeconds
网络请求的默认超时时间。在生成的客户端中,可以在请求级别覆盖此设置。
enableInlineTypes
启用后,内联模式将在 TypeScript 中生成为嵌套类型。 这会产生更清晰的类型名称和更直观的开发者体验。
enableInlineTypes: false:
enableInlineTypes: true:
现在用户可以按如下方式获取深度嵌套的 Bar 类型:
extraDependencies
专业版和企业版功能
此功能仅适用于专业版和企业版计划。如需开始使用,请联系 support@buildwithfern.com。
在生成的 package.json 中指定额外的依赖项。当您向 SDK 添加需要额外依赖项的自定义代码时,这很有用。
extraDevDependencies
专业版和企业版功能
此功能仅适用于专业版和企业版计划。如需开始使用,请联系 support@buildwithfern.com。
在生成的 package.json 中指定额外的开发依赖项。
extraPeerDependencies
在生成的 package.json 中指定额外的对等依赖项:
extraPeerDependenciesMeta
在生成的 package.json 中指定额外的对等依赖项元字段:
fetchSupport
选择是否要包含 node-fetch 以支持 Node.js 18 之前的版本,或选择 native 来使用 Node.js 18 及更高版本中可用的原生 fetch API。
fileResponseType
更改为二进制 HTTP 响应返回给用户的响应类型:
stream:返回流。请参见streamType,它控制返回的流类型。binary-response:返回BinaryResponse类型,允许用户选择如何使用二进制 HTTP 响应。 以下是用户与BinaryResponse交互的方式:
formDataSupport
选择是否要支持 Node.js 16 及以上版本(Node16),或 Node.js 18 及以上版本(Node18)。
Node16使用多个依赖项来支持多部分表单,包括form-data、formdata-node和form-data-encoder。Node18使用原生 FormData API,并接受更广泛的文件上传类型,如Buffer、File、Blob、Readable、ReadableStream、ArrayBuffer和Uint8Array
generateSubpackageExports
生成子包导出,允许用户直接导入单个客户端,而不是导入整个 SDK。这使 JavaScript 打包器能够摇树优化未使用的代码,显著减少打包大小。
启用此选项时,子包导出也会在生成的 README.md 中记录。
includeContentHeadersOnFileDownloadResponse
包含二进制响应中的内容类型和内容长度。用户将收到以下类型的对象:
<BINARY_RESPONSE_TYPE> 是 core.BinaryResponse 或流,取决于 fileResponseType 设置。
includeCredentialsOnCrossOriginRequests
启用后,在进行网络请求时会将 withCredentials 设置为 true。
includeOtherInUnionTypes
includeUtilsOnUnionMembers
inlineFileProperties
将文件上传属性生成为内联请求属性(而不是位置参数)。
inlineFileProperties: false:
inlineFileProperties: true:
inlinePathParameters
将路径参数内联到请求类型中。
inlinePathParameters: false:
inlinePathParameters: true:
namespaceExport
自定义生成的 SDK 中导出的命名空间和客户端类名。必须使用 PascalCase。
默认情况下,名称来源于 API 定义中定义的组织和 API 名称:
设置 namespaceExport 会覆盖这些默认名称:
naming
自定义命名空间导出和类/类型名称。接受字符串简写或完整对象。
字符串简写 — 设置命名空间并通过 PascalCase 派生所有类名:
对象形式 — 覆盖单个名称:
namespaceExport 仍然支持向后兼容,但 naming.namespace 优先级更高。
neverThrowErrors
启用后,当从服务器接收到非 200 响应时,客户端不会抛出错误。相反,响应会被包装在 ApiResponse 中。
noOptionalProperties
默认情况下,Fern 的 optional<> 属性将转换为可选的 TypeScript 属性:
启用 noOptionalProperties 后,生成的属性永远不是可选的。相反,类型使用 | undefined 生成。因此,用户必须显式地将属性设置为值或 undefined。
noSerdeLayer
控制是否为序列化/反序列化启用序列化层。
当 noSerdeLayer: false 时,生成的客户端包含自定义序列化代码,将属性名称转换为 camelCase,在运行时验证请求/响应,并支持复杂类型。
关于何时启用此选项的详细指导,请参见 TypeScript 序列化层。
offsetSemantics
控制如何为自动分页端点解释偏移参数。
item-index:偏移计算单个项目(例如,偏移 20 跳过前 20 个项目)。page-index:偏移计算页面(例如,偏移 3 跳到第 3 页)。
omitFernHeaders
启用后,生成的 SDK 在 HTTP 请求中省略 X-Fern-Language、X-Fern-SDK-Name 和 X-Fern-SDK-Version 标头。默认情况下会包含这些标头,以帮助 API 提供商识别 SDK 流量。
outputSourceFiles
控制生成文件的输出格式:
- 当为
true(默认)时:输出原始 TypeScript.ts文件 - 当为
false时:运行 TypeScript 编译器并输出编译的.js文件和.d.ts声明文件
packageJson
当您在 packageJson 中指定对象时,它将被合并到 package.json 文件中。这是自定义 SDK package.json 的推荐方式。
您也可以使用 packageJson.exports 来注册自定义子路径导出(例如 import { myHelper } from "@acme/sdk/helper")。生成器只为您的 API 定义自动生成导出条目,因此需要手动添加自定义文件——否则 Node.js 无法解析子路径导入。有关详细信息,请参见添加自定义代码。
package-name
指定用户将从中导入生成的客户端的 TypeScript 包名称。
例如,设置 package-name: "my_custom_package" 使用户能够使用
my_custom_package import Client 来导入您的客户端。
packagePath
指定生成的 SDK 源文件应放置的路径。
publishToJsr
将您的 SDK 发布到 JSR。启用后,生成器将生成 jsr.json 以及用于发布到 JSR 的 GitHub 工作流。
retainOriginalCasing
启用后,生成代码中的属性名称保留其在 API 定义中的原始大小写,而不是转换为 camelCase。
使用 OpenAPI 输入的示例:
使用 retainOriginalCasing: true 生成的 TypeScript:
使用默认设置(retainOriginalCasing: false)生成的 TypeScript:
generateWebSocketClients
从您的 AsyncAPI 规范生成 WebSocket 客户端。
之前名为 shouldGenerateWebsocketClients,该名称仍作为已弃用的别名被接受。
skipResponseValidation
默认情况下,如果服务器响应与预期类型不匹配(基于 Fern 定义中响应的建模方式),客户端将抛出错误。
如果 skipResponseValidation 设置为 true,则客户端永远不会因为响应格式错误而抛出错误。相反,客户端将使用 console.warn 记录问题并返回数据(转换为预期的响应类型)。
noSerdeLayer: false)时发生。序列化层默认被禁用(noSerdeLayer: true)。streamType
更改生成的 SDK 中使用的流类型。
wrapper:流使用具有多个底层实现的包装器,以支持 Node.js 18 之前的版本。web:流使用 Web 标准ReadableStream。
默认值是 web。
treatUnknownAsAny
启用 treatUnknownAsAny 后,来自 Fern 的未知类型将在 TypeScript 中使用 any 而不是 unknown 类型生成。
useBigInt
当 useBigInt 设置为 true 时,将使用自定义的 JSON 序列化器和反序列化器来保持 bigint 的精度,而不是使用原生的 JSON.stringify 和 JSON.parse 函数,后者会将 bigint 转换为数字而丢失精度。
当将 useBigInt 与我们的序列化层(noSerdeLayer: false)结合使用时,在 OpenAPI/Fern 规范中标记为 long 和 bigint 的请求和响应属性都将始终是 bigint。
但是,当禁用序列化层(noSerdeLayer: true)时,它们将被类型化为 number | bigint。更多信息请参见 TypeScript 序列化层。
以下是结合 useBigInt 和 noSerdeLayer 与下面的 Fern 定义时生成的类型的概述:
Fern 定义:
TypeScript 输出:
useBrandedStringAliases
当 useBrandedStringAliases 被禁用(默认值)时,字符串别名生成为
普通的 TypeScript 别名:
启用 useBrandedStringAliases 后,字符串别名生成为品牌字符串。这使每个别名感觉像自己的类型,并改善了编译时安全性。