# type-check 中文文档

规范地址：https://npmcn.com/package/type-check/

版本：0\.4\.0
npm 元数据更新时间：2023-06-22T16:33:59.902Z
中文译文更新时间：2026-11-04T23:38:11.270Z
软件包许可：MIT

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

原始 npm 页面：https://www.npmjs.com/package/type-check
原文对照：https://npmcn.com/package/type-check/?lang=original
项目主页：https://github.com/gkz/type-check
源码仓库：https://github.com/gkz/type-check

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

- 包体积（解压后）：21.2 kB，6 个文件
- 模块格式：CommonJS
- TypeScript 类型：未声明
- Node.js 要求：\>= 0\.8\.0
- 运行依赖：1 个
- 首次发布：2013-09-29T18:38:27.392Z
- 最新版本发布：2020-04-03T03:02:37.249Z
- 近 30 天下载量：585613169（2026-10-05 至 2026-11-03，npm 官方下载统计）
- 已发布版本数：6（近 12 个月 0 个）

## 中文简介

type-check允许您在运行时使用类似Haskell的类型语法检查JavaScript值的类型。

## 安装

```sh
npm install type-check
```

也可以使用：`pnpm add type-check`、`yarn add type-check`、`bun add type-check`

## README

# 类型检查 [![Build Status](https://travis-ci.org/gkz/type-check.png?branch=master)](https://travis-ci.org/gkz/type-check)

`type-check` 是一个库，它允许你在运行时用类似Haskell的类型语法检查JavaScript值的类型。它非常适合检查外部输入、测试，甚至可以为内部代码添加一点安全性。它是…的主要组成部分 [levn](https://github.com/gkz/levn)． 麻省理工学院的许可。0.4.0版本。请查看 [演示](http://gkz.github.io/type-check/)。

有关 `type-check`， [在twitter上关注我](https://twitter.com/gkzahariev)。

```
npm install type-check
```

## 快速的例子

```js
// Basic types:
var typeCheck = require('type-check').typeCheck;
typeCheck('Number', 1);               // true
typeCheck('Number', 'str');           // false
typeCheck('Error', new Error);        // true
typeCheck('Undefined', undefined);    // true

// Comment
typeCheck('count::Number', 1);        // true

// One type OR another type:
typeCheck('Number | String', 2);      // true
typeCheck('Number | String', 'str');  // true

// Wildcard, matches all types:
typeCheck('*', 2) // true

// Array, all elements of a single type:
typeCheck('[Number]', [1, 2, 3]);                // true
typeCheck('[Number]', [1, 'str', 3]);            // false

// Tuples, or fixed length arrays with elements of different types:
typeCheck('(String, Number)', ['str', 2]);       // true
typeCheck('(String, Number)', ['str']);          // false
typeCheck('(String, Number)', ['str', 2, 5]);    // false

// Object properties:
typeCheck('{x: Number, y: Boolean}', {x: 2, y: false});             // true
typeCheck('{x: Number, y: Boolean}',       {x: 2});                 // false
typeCheck('{x: Number, y: Maybe Boolean}', {x: 2});                 // true
typeCheck('{x: Number, y: Boolean}',      {x: 2, y: false, z: 3});  // false
typeCheck('{x: Number, y: Boolean, ...}', {x: 2, y: false, z: 3});  // true

// A particular type AND object properties:
typeCheck('RegExp{source: String, ...}', /re/i);          // true
typeCheck('RegExp{source: String, ...}', {source: 're'}); // false

// Custom types:
var opt = {customTypes:
  {Even: { typeOf: 'Number', validate: function(x) { return x % 2 === 0; }}}};
typeCheck('Even', 2, opt); // true

// Nested:
var type = '{a: (String, [Number], {y: Array, ...}), b: Error{message: String, ...}}'
typeCheck(type, {a: ['hi', [1, 2, 3], {y: [1, 'ms']}], b: new Error('oh no')}); // true
```

请查看 [类型语法格式](https://npmcn.com/package/type-check/#readme-syntax) 和 [指南](https://npmcn.com/package/type-check/#readme-guide)。

## 用法

`require('type-check');` 返回一个公开四个属性的对象。 `VERSION` 以字符串形式表示库的当前版本。 `typeCheck`， `parseType`, `parsedTypeCheck` 是功能。

```js
// typeCheck(type, input, options);
typeCheck('Number', 2);               // true

// parseType(type);
var parsedType = parseType('Number'); // object

// parsedTypeCheck(parsedType, input, options);
parsedTypeCheck(parsedType, 2);       // true
```

### typeCheck（类型，输入，选项）

`typeCheck` 检查JavaScript值 `input` 反对 `type` 写在 [类型格式](https://npmcn.com/package/type-check/#readme-type-format) (并考虑到可选的 `options`)并返回 `input` 匹配 `type`。

##### 参数

-   类型, `String` -写在 [类型格式](https://npmcn.com/package/type-check/#readme-type-format) 要对照哪一个
-   输入- `*` -任何JavaScript值，将根据类型进行检查
-   选项- `Maybe Object` -一个可选参数，指定附加选项，目前唯一可用的选项是指定 [自定义类型](https://npmcn.com/package/type-check/#readme-custom-types)

##### 返回

`Boolean` -输入是否与类型匹配

##### 例子

```js
typeCheck('Number', 2); // true
```

### parseType(类型)

`parseType` 解析字符串 `type` 写在 [类型格式](https://npmcn.com/package/type-check/#readme-type-format) 转换为表示已解析类型的对象。

##### 参数

-   类型, `String` -写在 [类型格式](https://npmcn.com/package/type-check/#readme-type-format) 要解析哪个

##### 返回

`Object` -以解析类型格式表示解析类型的对象

##### 例子

```js
parseType('Number'); // [{type: 'Number'}]
```

### parsedTypeCheck（parsedType, input, options）

`parsedTypeCheck` 检查JavaScript值 `input` 对解析 `type` 在已解析的类型格式中(并考虑可选的 `options`)并返回 `input` 匹配 `type`． 与…结合使用 `parseType` 如果要多次使用一个类型。

##### 参数

-   类型, `Object` -要检查的已解析类型格式中的类型
-   输入- `*` -任何JavaScript值，将根据类型进行检查
-   选项- `Maybe Object` -一个可选参数，指定附加选项，目前唯一可用的选项是指定 [自定义类型](https://npmcn.com/package/type-check/#readme-custom-types)

##### 返回

`Boolean` -输入是否与类型匹配

##### 例子

```js
parsedTypeCheck([{type: 'Number'}], 2); // true
var parsedType = parseType('String');
parsedTypeCheck(parsedType, 'str');     // true
```

##类型格式

### 语法

空白被忽略。根节点是a **类型**。

-   **标识符** ＝ `[\$\w]+` -一组小写或大写字母、数字、下划线或美元符号。 `String`
-   **类型** =一个 `Identifier`,一个 `Identifier` 后面是 `Structure`，只是…… `Structure`，或通配符 `*` ——如。 `String`， `Object{x: Number}`， `{x: Number}`， `Array{0: String, 1: Boolean, length: Number}`， `*`
-   **类型** =可选的注释（an） `Identifier` 后面是 `::`)，可选的标识符 `Maybe`，一个或多个 `Type`，由 `|` ——如。 `Number`， `String | Date`， `Maybe Number`， `Maybe Boolean | String`
-   **结构** ＝ `Fields`，或者 `Tuple`，或 `Array` ——如。 `{x: Number}`， `(String, Number)`， `[Date]`
-   **字段** =一个 `{`，跟随一个或多个 `Field` 用逗号分隔 `,` (落后于逗号 `,` 是允许的)，可选的an `...` (前面总是加逗号 `,`)，后面跟着a `}` ——如。 `{x: Number, y: String}`， `{k: Function, ...}`
-   **场** =一个 `Identifier`，后面跟着一个冒号 `:`，其次是 `Types` ——如。 `x: Date | String`， `y: Boolean`
-   **元组** =一个 `(`，后面跟着一个或多个 `Types` 用逗号分隔 `,` (落后于逗号 `,` 是允许的)，后面跟着 `)` ——如 `(Date)`， `(Number, Date)`
-   **数组** =一个 `[` 后面紧跟着一个 `Types` 后面是 `]` ——如。 `[Boolean]`， `[Boolean | Null]`

### 指南

`type-check` 使用 `Object.toString` 找出一个值的基本类型。具体地说,

```js
{}.toString.call(VALUE).slice(8, -1)
{}.toString.call(true).slice(8, -1) // 'Boolean'
```

基本类型，如： `Number`，使用这张支票。这比使用更通用 `typeof` -例如，with `document`， `typeof` 生产 `'object'` 我们的技术产生了什么 `'HTMLDocument'`。

您可以通过使用。分隔类型来检查多个类型 `|`． 检查器从左到右执行，如果值是以下类型中的任何一种，则传递。 `String | Boolean` 首先检查值是否为字符串，然后检查是否为布尔值。如果不符合上述条件，则返回false。

添加一个 `Maybe` 在多个类型的列表前检查也是一样的 `Null` 和 `Undefined` ——如。 `Maybe String` 等于 `Undefined | Null | String`。

您可以在标识符后面添加注释，以提醒您该类型是用于什么的 `::` 在一个类型（或多个类型）之前。评论被直接扔了出去。

通配符 `*` 匹配所有类型。

有三种类型的结构用于检查值的内容：‘fields’， ‘tuple’和‘array’。

如果由自身使用，‘fields’结构将传递任何类型的对象，只要它是的实例 `Object` 属性传递——这允许鸭子输入——例如。 `{x: Boolean}`。

若要检查属性是否通过，且值是否为特定类型，可以指定类型-例如。 `Error{message: String}`。

如果您想使一个字段成为可选的，您可以简单地使用 `Maybe` ——如。 `{x: Boolean, y: Maybe String}` 还是会通过 `y` 未定义（或null）。

如果你不关心值是否有超出你指定的属性，你可以使用‘etc’操作符 `...` ——如。 `{x: Boolean, ...}` 将对象与an匹配 `x` 属性，该属性为布尔值，并且具有零个或多个其他属性。

对于数组，必须指定一个或多个类型（用。分隔） `|`) -它将传递任何长度的东西，只要每个元素传递提供的类型-例如。 `[Number]`， `[Number | String]`。

元组检查固定数量的元素，每个元素可能具有不同的类型。每个元素之间用逗号分隔。 `(String, Number)`。

数组和元组结构检查值是否为类型 `Array` 默认情况下，但如果指定了另一种类型，它们将检查该类型-例如。 `Int32Array[Number]`． 您可以使用通配符 `*` 搜索任何类型。

请查看 [类型优先级](https://github.com/zaboco/type-precedence) 用于类型检查的库。

## 选项

Options是一个对象。的可选参数 `typeCheck` 和 `parsedTypeCheck` 功能。当前唯一的选择是 `customTypes`。

自定义类型

**例子:**

```js
var options = {
  customTypes: {
    Even: {
      typeOf: 'Number',
      validate: function(x) {
        return x % 2 === 0;
      }
    }
  }
};
typeCheck('Even', 2, options); // true
typeCheck('Even', 3, options); // false
```

`customTypes` 允许您设置用于验证的自定义类型。this的值是一个对象。对象的键是要匹配的类型。对象的每个值都是一个具有 `typeOf` 属性-字符串，和 `validate` 属性-一个函数。

这个 `typeOf` 属性是值应该是的类型（可选-如果没有设置） `validate` 将被使用)，和 `validate` 是一个函数，如果值为该类型，则该函数应返回true。 `validate` 接收一个参数，这是我们正在检查的值。

## 技术对

`type-check` 写在 [LiveScript](http://livescript.net/) -一种编译成JavaScript的语言。它还使用 [prelude.ls](http://preludels.com/) 图书馆。

## 常见问题

### type-check 是什么？

type-check允许您在运行时使用类似Haskell的类型语法检查JavaScript值的类型。

### 如何安装 type-check？

在项目目录运行 npm install type-check，或使用 pnpm add / yarn add / bun add。

### type-check 支持 TypeScript 吗？

该包的 package\.json 没有声明类型入口。需要类型提示时，可以在 npm 上查找社区维护的 @types/type-check 是否存在。

### type-check 支持 ESM 还是 CommonJS？

以 CommonJS 形式发布，可以直接 require\(\)；在 ES Module 项目中也可以用 import 引入（Node\.js 会把 module\.exports 作为默认导出）。

### type-check 需要什么版本的 Node\.js？

package\.json 的 engines 字段要求 Node\.js \>= 0\.8\.0。版本不符时 npm 默认只给出警告，开启 engine-strict 后会拒绝安装。

### type-check 可以商用吗？

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

### type-check 的下载量有多少？

根据 npm 官方下载统计，type-check 在 2026/10/05 – 2026/11/03 这 30 天内被下载 585,613,169 次，日均约 19,520,439 次。下载量会把 CI 构建、镜像同步和作为其他包依赖的安装一并计入，适合横向比较热度，不能直接等同于使用人数。

### type-check 还在维护吗？

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

