# @asleepace/try 中文文档

规范地址：https://npmcn.com/package/%40asleepace/try/

版本：0\.2\.1
npm 元数据更新时间：2025-04-27T01:25:32.474Z
中文译文更新时间：2026-11-06T23:38:42.415Z
软件包许可：MIT

本文由上游 README 翻译，可能存在偏差，请结合原文核对 API、命令与配置。版权与许可归原作者所有。

原始 npm 页面：https://www.npmjs.com/package/%40asleepace/try
原文对照：https://npmcn.com/package/%40asleepace/try/?lang=original

## 关键信息（来自 npm 元数据）

- 包体积（解压后）：22.9 kB，7 个文件
- 模块格式：ES Module
- TypeScript 类型：包内自带
- 运行依赖：0 个
- peer 依赖：typescript ^5
- 首次发布：2025-04-24T17:31:50.361Z
- 最新版本发布：2025-04-27T01:25:32.313Z
- 近 30 天下载量：42540（2026-10-07 至 2026-11-05，npm 官方下载统计）
- 已发布版本数：7（近 12 个月 0 个）

## 中文简介

用于例外处理和错误的脚本工具.

## 安装

```sh
npm install @asleepace/try
```

也可以使用：`pnpm add @asleepace/try`、`yarn add @asleepace/try`、`bun add @asleepace/try`

## README

# 尝试

![try-catch-cover](https://github.com/user-attachments/assets/043b452a-56c5-4697-aa79-c5a059c5f6c6)

现代JavaScript & TypeScript项目的安全出错处理原始.

## 安装

使用 npm :

```bash
npm install @asleepace/try
```

使用 Yarn :

```bash
yarn add @asleepace/try
```

使用 Bun :

```bash
bun add @asleepace/try
```

## 快速启动

该套件的目标是提供简洁,类型安全并易于使用的工具来处理例外情况.

```ts
import { Try } from '@asleepace/try'

const [url, error] = Try.catch(() => new URL(userInput))

if (error) return console.warn(error.message)

const [response, networkError] = await Try.catch(() => fetch(url))
const [jsonData, parsingError] = await Try.catch(() => response!.json())

if (parsingError) return console.warn(parsingError.message)

return jsonData.userName
```

## 结果类型

这个 `Try.catch(fn)` 工具返回特殊结果类型 `Res` 这门课会延伸一个结果拖累。 这个 `Res` 类提供 处理成果的一些有用设施:

```ts
const result = await Try.catch(() => response.json())

// includes powerful type-guards
if (result.isErr()) return console.warn(result.error.message)

// and convenience methods
const json = result.unwrap()

// supports array destructuring
const [user, error] = await Try.catch(async () => {
  const profileUrl = new URL(json.user!.profile)
  return fetch(profileUrl).then((res) => res.json())
})

if (!error) {
  console.log(`Hello, ${user.name}!`)
} else {
  console.warn(error.message)
}
```

该词可以和数组解结构语法结合使用,如果只对值或出错感兴趣,该语法可以有所帮助.

```ts
const result = await Try.catch(() =>
  fetch('https://api.users.com/me')
    .then((res) => res.json())
    .then((usr) => usr as User)
)

console.log(result.value) // User  | undefined
console.log(result.error) // Error | undefined

// automatically narrows the type for you!

if (result.isOk()) {
  const user = result.value // User!
} else {
  const fail = result.error // Error!
}

// in some cases you may just want the value or to throw again:

const user = result.unwrap() // User | never

// or you may want the value or a fallback:

const user = result.unwrapOr(cachedUser) // User
```

## API 密码

```ts
Try.catch<T>(fn: () => Promise<T>): Promise<[T, undefined] | [undefined, Error]>
```

执行一个函数并返回一个包含以下任一内容的 tuple:

-   `[value, undefined]` 如果函数成功执行
-   `[undefined, error]` 如果函数丢出错误

工作既具有同步功能,又具有同步功能,自动返回一个Aync操作的保证.

## 简写

此套件还导出一个名为 : **兽医** 这代表 _值/ 出错_ 并提供了一个更简洁的方式 与这个 api 互动.

```ts
// Add more examples of the VET shorthand
import { vet } from '@asleepace/try'

// Simple usage
const [value] = vet(() => JSON.parse(data))

// Only get the error
const [, error] = vet(() => JSON.parse(data))

// With TypeScript generics for better type inference
const [user] = vet<User>(() => getUserFromAPI())
```

## 福利

-   **无尝试/ 批次块**: 清洁、可读代码,无嵌入式试验/捕获结构
-   **类型安全**: 完整的类型Script支持和适当的类型推论
-   **一致模式**:同步和同步代码的统一错误处理
-   **无依赖**:轻而无依赖性
-   **异态**: 在浏览器和节点环境中工作
-   **强大的结果**: 安全、测试和多用途结果类别

## 测试

这个包包括一个全面的测试套件. 为了进行测试:

```bash
# Clone the repository
git clone https://github.com/asleepace/try.git
cd try

# Install dependencies
bun install

# Build project & generate types
bun run build

# Run tests
bun test
```

## 实例

### 请求网络

```ts
// handle synchronous operations which can throw with ease...
const encoded = Try.catch(() => JSON.stringify(userInput))

if (!encoded.ok) return encoded.error

const [response, networkError] = await Try.catch(() =>
  fetch('https://api.com/create', {
    method: 'POST',
    body: encoded.value,
  })
)

if (networkError) return networkError

const [user, jsonError] = await Try.catch(response.json)

if (jsonError) return jsonError

return user
```

### 反应组件中的处理出错

```tsx
import React, { useEffect, useState } from 'react'
import { Try } from '@asleepace/try'

function UserProfile({ userId }) {
  const [user, setUser] = useState(null)
  const [loading, setLoading] = useState(true)
  const [error, setError] = useState(null)

  useEffect(() => {
    async function loadUser() {
      setLoading(true)

      const [userData, fetchError] = await Try.catch(async () => {
        const response = await fetch(`/api/users/${userId}`)
        if (!response.ok) throw new Error(`HTTP error ${response.status}`)
        return response.json()
      })

      setUser(userData)
      setError(fetchError)
      setLoading(false)
    }

    loadUser()
  }, [userId])

  if (loading) return <div>Loading...</div>
  if (error) return <div>Error: {error.message}</div>

  return (
    <div>
      <h1>{user.name}</h1>
      <p>{user.email}</p>
    </div>
  )
}
```

### 链路操作

```ts
import { Try } from '@asleepace/try'

async function processData(rawData): object | undefined {
  // Step 1: Parse the data
  const [parsed, parseError] = Try.catch(() => JSON.parse(rawData))
  if (parseError) return console.warn(parseError.message)

  // Step 2: Transform the data
  const [transformed, transformError] = Try.catch(() => {
    return parsed.items.map((item) => ({
      id: item.id,
      name: item.name.toUpperCase(),
      value: item.value * 2,
    }))
  })
  if (transformError) return console.warn(transformError.message)

  // Step 3: Save the data
  const saveResult = await Try.catch(async () => {
    const response = await fetch('/api/save', {
      body: JSON.stringify(transformed),
      method: 'POST',
    })
    return response.json()
  })

  if (saveResult.isErr()) return console.warn(saveResult.error)
  return saveResult.unwrap()
}
```

# 规格

## 概览

这个 `Try.catch` 函数提供了一种类型安全的方法来处理同步函数和同步函数中的错误,返回一个包含一个值或一个出错但从不同时包含的结果拖转.

## 返回值

-   `Try.catch` 总是返回一个或一个 `ResultOk<T>` 或者说 `ResultError` 类型,该类型延伸出tuple类型 `[T, undefined]` 或者说 `[undefined, Error]` 页:1.
-   返回对象保证有确切的两个元素,或者索引0,或者索引1没有定义.
-   如果函数成功完成,索引 0 将包含返回值,索引 1 将未定义 .
-   如果函数丢出错误,索引 0 将被取消定义,索引 1 将包含错误.

## 处理错误

-   如果抛出一个非错误值( 如字符串、 数字或对象), 将自动转换为内置实例 `Error` 课.
-   抛出尚未出错的值将首先被强制用字符串,然后用于构建新的 `Error` 举个例子.
-   如果函数返回一个 `Error` 对象作为其值(不是抛出),它将被当作成功结果与 `Error` 作为索引 0 的值,而不是错误大小写.

## 属性和方法

返回结果对象包括若干便利属性和方法:

-   `.value`: 返回索引 0 的值(成功值),如果出现错误,则返回未定义的值.
-   `.error`:在索引1中返回错误,如果操作成功,则返回未定义错误.
-   `.ok`: 一个布尔属性,即 `true` 何时 `.error === undefined` 财务报告和审定财务报表 `false` 否则.
-   `.unwrap()`: 如果存在, 返回该值, 如果没有值, 则丢弃已捕获错误 .
-   `.unwrapOr(fallback)`: 如果数值存在, 返回该值, 如果没有值, 则返回该值.
-   `.toString()`: 返回结果的字符串表示,显示成功值或错误消息.

## 类型安全

-   返回的结果类型在类型保护上正确缩小:
    -   检查时 `if (result.ok)`,类型脚本将缩小类型到 `ResultOk<T>`。 。 。 .
    -   检查时 `if (!result.ok)`,类型脚本将缩小类型到 `ResultError`。 。 。 .
-   单位 `ResultOk<T>` 环境, `result.value` 输入为 `T` 财务报告和审定财务报表 `result.error` 输入为 `undefined`。 。 。 .
-   单位 `ResultError` 环境, `result.value` 输入为 `undefined` 财务报告和审定财务报表 `result.error` 输入为 `Error`。 。 。 .

## 同步支持

-   `Try.catch` 支持同步和同步函数.
-   当通过一个返回承诺的函数时, `Try.catch` 返回一个解答结果的 TUPLE的承诺.
-   拒绝的许诺被俘获并转换为出错结果,遵循与抛出错误相同的规则.

## 支持实例

-   返回结果对象为 `TryResultClass`,启用 `instanceof` 检查.
-   这样可以更容易地进行类型检查,并与现有的代码模式相融合.

# 更改日志

## 6.2.1 国家

-   添加 `Res.ok(value)` 财务报告和审定财务报表 `Res.err(error)` 初始化器
-   添加 `isOk()` 财务报告和审定财务报表 `isErr()` 结果类型警卫
-   将所有代码移动到 `src/index.ts`
-   删除垃圾文件并缩小包大小
-   删除内部 `Try.#handler` 方法
-   简化 `Try.catch` 逻辑
-   简化类型

## 0.2.0 (中文(简体) )

-   添加 `vet(fn)` 手写
-   添加方便方法
-   更新 `Result` 类
-   更新测试套件

## 0.14.0 (简体中文)

-   更新 `README.md`
-   更新 `Try.catch` 函数

## 0.13.0 (韩语)

-   初步释放

## 许可证

麻省理工学院

## 常见问题

### @asleepace/try 是什么？

用于例外处理和错误的脚本工具\.

### 如何安装 @asleepace/try？

在项目目录运行 npm install @asleepace/try，或使用 pnpm add / yarn add / bun add。它还需要宿主项目提供 peer 依赖：typescript（^5）。npm 7 及以上与 pnpm 8 及以上默认会自动安装必需的 peer 依赖，Yarn 需要手动安装。

### @asleepace/try 支持 TypeScript 吗？

支持。包内自带 TypeScript 类型声明（package\.json 声明了 types 入口），安装后即可获得类型提示，无需再安装 @types 包。

### @asleepace/try 支持 ESM 还是 CommonJS？

以 ES Module 形式发布，推荐使用 import 引入。在 CommonJS 项目中，Node\.js 20\.19\+ / 22\.12\+ 可以直接 require\(\) 不含顶层 await 的 ES Module，更早的版本需要改用动态 import\(\)。

### @asleepace/try 可以商用吗？

@asleepace/try 使用 MIT 许可。宽松许可：允许商业使用、修改和再分发，通常只需在分发时保留原版权与许可声明。以上为概括，不构成法律意见，请以许可原文为准。

### @asleepace/try 的下载量有多少？

根据 npm 官方下载统计，@asleepace/try 在 2026/10/07 – 2026/11/05 这 30 天内被下载 42,540 次，日均约 1,418 次。下载量会把 CI 构建、镜像同步和作为其他包依赖的安装一并计入，适合横向比较热度，不能直接等同于使用人数。

### @asleepace/try 还在维护吗？

最新版本 0\.2\.1 发布于 2025/04/27（1\.5 年前）；至今共发布 7 个版本，其中过去 12 个月发布了 0 个；首次发布于 2025/04/25。发布频率只是参考信号：功能稳定的工具可能很少需要更新，建议结合源码仓库的 issue 和提交记录判断。

