@exodus/typeforce

中文文档
1.19.5发布于 2026/10/14MITTypeScriptCommonJS零依赖近 30 天下载 4.7万

Javascript 的另一个偏颇类型检查解决方案

中文使用文档

类型力

build status Version

Javascript的另一个偏颇类型检查解决方案 .

例外消息可能会在补丁版本之间发生改变,因为补丁经常会改变一些出乎意料的行为,自然会导致不同的错误消息.

实例

var typeforce = require('typeforce')

// supported primitives 'Array', 'Boolean', 'Buffer', 'Number', 'Object', 'String'
typeforce('Array', [])

typeforce('Number', [])
// TypeError: Expected Number, got Array

// array types
typeforce(['Object'], [{}])
typeforce(typeforce.arrayOf('Object'), [{}, {}, {}])

// enforces object properties
typeforce(
  {
    foo: 'Number',
  },
  {
    foo: 'bar',
  }
)
// TypeError: Expected property "foo" of type Number, got String "bar"

// maybe types
typeforce('?Number', 2)
typeforce('?Number', null)
typeforce(typeforce.maybe(typeforce.Number), 2)
typeforce(typeforce.maybe(typeforce.Number), null)

// sum types
typeforce(typeforce.anyOf('String', 'Number'), 2)
typeforce(typeforce.allOf({ x: typeforce.Number }, { y: typeforce.Number }), {
  x: 1,
  y: 2,
})

// value types
typeforce(typeforce.value(3.14), 3.14)

// custom types
function LongString(value, strict) {
  if (!typeforce.String(value)) return false
  if (value.length !== 32) return false
  return true
}

typeforce(LongString, '00000000000000000000000000000000')
// => OK!

typeforce(LongString, 'not long enough')
// TypeError: Expected LongString, got String 'not long enough'

赞成提示 :

// use precompiled primitives for high performance
typeforce(typeforce.Array, array)

// or just precompile a template
var type = {
  foo: 'Number',
  bar: '?String',
}

var fastType = typeforce.compile(type)
// fastType => typeforce.object({
//   foo: typeforce.Number,
//   bar: typeforce.maybe(typeforce.String)
// })

// use strictness for recursive types to enforce whitelisting properties
typeforce(
  {
    x: 'Number',
  },
  { x: 1 },
  true
)
// OK!

typeforce(
  {
    x: 'Number',
  },
  { x: 1, y: 2 },
  true
)
// TypeError: Unexpected property 'y' of type Number

赞成提示( 扩展类型 ) :

typeforce(typeforce.tuple('String', 'Number'), ['foo', 1])
// OK!

typeforce(typeforce.tuple('Number', 'Number'), ['not a number', 1])
// TypeError: Expected property "0" of type Number, got String 'not a number'

typeforce(typeforce.map('Number'), {
  anyKeyIsOK: 1,
})
// OK!

typeforce(typeforce.map('Number', typeforce.HexN(8)), {
  deadbeef: 1,
  ffff0000: 2,
})
// OK!

function Foo() {
  this.x = 2
}

typeforce(typeforce.quacksLike('Foo'), new Foo())
// OK!

// Note, any Foo will do
typeforce(typeforce.quacksLike('Foo'), new (function Foo() {})())
// OK!

赞成提示( 无抛出)

var typeforce = require('typeforce/nothrow')
var value = 'foobar'

if (typeforce(typeforce.Number, value)) {
  // didn't throw!
  console.log(`${value} is a number`) // never happens
} else {
  console.log(`Oops, ${typeforce.error.message}`)
  // prints 'Oops, Expected Number, got String foobar'
}

赞成提示( 同步)

var typeforce = require('typeforce/async')

typeforce(typeforce.Number, value, function (err) {
  if (err) return console.log(`Oops, ${typeforce.error.message}`)

  console.log(`${value} is a number`) // never happens
})

警告:对使用 quacksLike 类型,因为它依赖于 Foo.name 属性. 如果该财产被转接者所操纵,例如: uglifyjs你会有一个糟糕的时间.

自由主义 麻省理工学院

版本与发布记录

@exodus/typeforce 共发布 8 个版本,首次发布于 2021/01/11;过去 12 个月发布了 4 个版本。

版本发布日期距今
1.19.5latest2026/10/141 个月前
1.19.42026/07/163 个月前
1.19.32026/06/065 个月前
1.19.22026/03/058 个月前
1.19.12024/11/022 年前
1.19.02024/05/082 年前

关于 @exodus/typeforce 的常见问题

@exodus/typeforce 是什么?

Javascript 的另一个偏颇类型检查解决方案

如何安装 @exodus/typeforce?

在项目目录运行 npm install @exodus/typeforce,或使用 pnpm add / yarn add / bun add。

@exodus/typeforce 支持 TypeScript 吗?

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

@exodus/typeforce 支持 ESM 还是 CommonJS?

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

@exodus/typeforce 可以商用吗?

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

@exodus/typeforce 的下载量有多少?

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

@exodus/typeforce 还在维护吗?

最新版本 1.19.5 发布于 2026/10/14(1 个月前);至今共发布 8 个版本,其中过去 12 个月发布了 4 个;首次发布于 2021/01/11。发布频率只是参考信号:功能稳定的工具可能很少需要更新,建议结合源码仓库的 issue 和提交记录判断。