type-check

中文文档
0.4.0发布于 2020/04/03MITCommonJS近 30 天下载 5.7亿

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

中文使用文档
文档目录9 节
  1. 快速的例子
  2. 用法
  3. typeCheck(类型,输入,选项)
  4. parseType(类型)
  5. parsedTypeCheck(parsedType, input, options)
  6. 语法
  7. 指南
  8. 选项
  9. 技术对

类型检查 Build Status

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

有关 type-check, 在twitter上关注我。

npm install type-check

快速的例子

// 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

请查看 类型语法格式 和 指南。

用法

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

// 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 写在 类型格式 (并考虑到可选的 options)并返回 input 匹配 type。

参数
  • 类型, String -写在 类型格式 要对照哪一个
  • 输入- * -任何JavaScript值,将根据类型进行检查
  • 选项- Maybe Object -一个可选参数,指定附加选项,目前唯一可用的选项是指定 自定义类型
返回

Boolean -输入是否与类型匹配

例子
typeCheck('Number', 2); // true

parseType(类型)

parseType 解析字符串 type 写在 类型格式 转换为表示已解析类型的对象。

参数
返回

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

例子
parseType('Number'); // [{type: 'Number'}]

parsedTypeCheck(parsedType, input, options)

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

参数
  • 类型, Object -要检查的已解析类型格式中的类型
  • 输入- * -任何JavaScript值,将根据类型进行检查
  • 选项- Maybe Object -一个可选参数,指定附加选项,目前唯一可用的选项是指定 自定义类型
返回

Boolean -输入是否与类型匹配

例子
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 找出一个值的基本类型。具体地说,

{}.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]. 您可以使用通配符 * 搜索任何类型。

请查看 类型优先级 用于类型检查的库。

选项

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

自定义类型

例子:

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 -一种编译成JavaScript的语言。它还使用 prelude.ls 图书馆。

版本与发布记录

type-check 共发布 6 个版本,首次发布于 2013/09/30;过去 12 个月发布了 0 个版本。

版本发布日期距今
0.4.0latest2020/04/036 年前
0.3.22015/12/2910 年前
0.3.12014/04/0812 年前
0.3.02013/10/3013 年前
0.2.02013/10/0313 年前
0.1.02013/09/3013 年前

关于 type-check 的常见问题

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/04 – 2026/11/02 这 30 天内被下载 570,317,284 次,日均约 19,010,576 次。下载量会把 CI 构建、镜像同步和作为其他包依赖的安装一并计入,适合横向比较热度,不能直接等同于使用人数。

type-check 还在维护吗?

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