@eslint/object-schema

中文文档
3.0.5发布于 2026/04/08Apache-2.0TypeScriptESM + CJS零依赖构建来源已验证近 30 天下载 5.1亿

对象计划合并/验证器

中文使用文档
文档目录17 节
  1. 概览
  2. 安装
  3. 使用量
  4. 提示和诡计
  5. 命名合并策略
  6. 命名验证策略
  7. 内建战略班
  8. 子计划
  9. 合并时删除密钥
  10. 需要另一个要显示的密钥
  11. 许可证
  12. 发起人
  13. 白金赞助商
  14. 黄金赞助商
  15. 白银赞助商
  16. 青铜赞助商
  17. 技术赞助商

对象计划包

概览

一个 JavaScript 对象合并/验证工具,在此可以定义每个密钥不同的合并和验证策略. 当您需要验证复杂数据结构,然后以比它更复杂的方式将其合并时,这样做很有帮助 Object.assign()。此选项用于 @eslint/config-array 软件包,但也可以单独使用.

安装

对于节点和相容运行时间:

npm install @eslint/object-schema
# or
yarn add @eslint/object-schema
# or
pnpm install @eslint/object-schema
# or
bun add @eslint/object-schema

对于德诺:

deno add @eslint/object-schema

使用量

导入 ObjectSchema 构造器 :

// using ESM
import { ObjectSchema } from "@eslint/object-schema";

// using CommonJS
const { ObjectSchema } = require("@eslint/object-schema");

const schema = new ObjectSchema({
    // define a definition for the "downloads" key
    downloads: {
        required: true,
        merge(value1 = 0, value2) {
            return value1 + value2;
        },
        validate(value) {
            if (typeof value !== "number") {
                throw new Error("Expected downloads to be a number.");
            }
        },
    },

    // define a strategy for the "versions" key
    versions: {
        required: true,
        merge(value1 = [], value2) {
            return value1.concat(value2);
        },
        validate(value) {
            if (!Array.isArray(value)) {
                throw new Error("Expected versions to be an array.");
            }
        },
    },
});

const record1 = {
    downloads: 25,
    versions: ["v1.0.0", "v1.1.0", "v1.2.0"],
};

const record2 = {
    downloads: 125,
    versions: ["v2.0.0", "v2.1.0", "v3.0.0"],
};

// make sure the records are valid
schema.validate(record1);
schema.validate(record2);

// merge together (schema.merge() accepts any number of objects)
const result = schema.merge(record1, record2);

// result looks like this:
// {
// 	downloads: 150,
// 	versions: ["v1.0.0", "v1.1.0", "v1.2.0", "v2.0.0", "v2.1.0", "v3.0.0"],
// }

提示和诡计

命名合并策略

而不是指定一个 merge() 方法,您可以指定以下字符串之一来使用默认合并策略:

  • "assign" - 使用时 Object.assign() 将两个值合并为一个对象.
  • "overwrite" - 第二个值总是取代第一个值.
  • "replace" - 如果第二个值不是第一个,第二个值将替换第一个值 undefined。 。 。 .

例如:

const schema = new ObjectSchema({
    name: {
        merge: "replace",
        validate() {},
    },
});

命名验证策略

而不是指定一个 validate() 方法,您可以指定下列字符串之一来使用默认验证策略:

  • "array" - 值必须是数组.
  • "boolean" - 值必须是一个布尔.
  • "number" - 值必须是数字.
  • "object" - 值必须是非正数对象,包括数组和非正数对象.
  • "object?" - 值必须是对象或无效的,包括数组和非平面对象.
  • "string" - 值必须是字符串.
  • "string!" - 值必须是非空字符串.

例如:

const schema = new ObjectSchema({
    name: {
        merge: "replace",
        validate: "string",
    },
});

内建战略班

软件包还将内置的合并和验证策略导出为两个类,采用静态方法:

  • MergeStrategy - 内置合并功能(assign, (中文(简体) ), overwrite, (中文(简体) ), replace) (中文(简体) ).
  • ValidationStrategy - 内置验证功能(array, (中文(简体) ), boolean, (中文(简体) ), number, (中文(简体) ), object, (中文(简体) ), object?, (中文(简体) ), string, (中文(简体) ), string!) (中文(简体) ).

这些策略与您按名称指定策略时所使用的策略相同( 例如, merge: "replace") (中文(简体) ). 如果您偏好通过一个函数而不是字符串, 您可以直接引用函数 :

import {
    ObjectSchema,
    MergeStrategy,
    ValidationStrategy,
} from "@eslint/object-schema";

const schema = new ObjectSchema({
    name: {
        required: true,
        merge: MergeStrategy.replace,
        validate: ValidationStrategy["string!"],
    },
    options: {
        required: false,
        merge: MergeStrategy.assign,
        validate: ValidationStrategy["object?"],
    },
});

注:因为 object? 财务报告和审定财务报表 string! 不是有效的标识符, 您必须使用括号标记访问它们( 例如 , ValidationStrategy["object?"]) (中文(简体) ).

子计划

如果您正在定义一个键, 它本身, 一个对象, 您可以使用 subschema 来简化进程 。 而不是定义 merge() 财务报告和审定财务报表 validate(),设置 schema 包含图案定义的属性,例如:

const schema = new ObjectSchema({
    name: {
        schema: {
            first: {
                merge: "replace",
                validate: "string",
            },
            last: {
                merge: "replace",
                validate: "string",
            },
        },
    },
});

schema.validate({
    name: {
        first: "n",
        last: "z",
    },
});

合并时删除密钥

如果密钥返回的合并策略 undefined,则键将不会在最终对象中出现。 例如:

const schema = new ObjectSchema({
    date: {
        merge() {
            return undefined;
        },
        validate(value) {
            if (isNaN(Date.parse(value))) {
                throw new Error("Invalid date.");
            }
        },
    },
});

const object1 = { date: "5/5/2005" };
const object2 = { date: "6/6/2006" };

const result = schema.merge(object1, object2);

console.log("date" in result); // false

需要另一个要显示的密钥

如果你希望有一把钥匙 需要另一把钥匙,你可以使用 requires 属性以指定任何密钥需要的一组其他属性。 例如:

const schema = new ObjectSchema({
    date: {
        merge() {
            return undefined;
        },
        validate(value) {
            if (isNaN(Date.parse(value))) {
                throw new Error("Invalid date.");
            }
        },
    },
    time: {
        requires: ["date"],
        merge(first, second) {
            return second;
        },
        validate(value) {
            // ...
        },
    },
});

// throws error: Key "time" requires keys "date".
schema.validate({
    time: "13:45",
});

在这个例子中,尽管 date 是一个可选的密钥,它需要随时在场 time 已存在.

许可证

Apache 2.0 (英语)

发起人

以下公司,组织,个人支持ESLint的持续维护与发展. 成为发起人 让你的标志在我们的读取器和 网站。 。 。 .

白金赞助商

Automattic

黄金赞助商

Qlty Software

白银赞助商

Vite Liftoff StackBlitz

青铜赞助商

Cybozu SAP CrawlJobs aeriusventilation's Org Depot Icons8 Discord GitBook HeroCoders TestMu AI Open Source Office (Formerly LambdaTest)

技术赞助商

技术赞助者允许我们免费利用其产品和服务,作为对开放源生态系统和我们工作的贡献的一部分.

Netlify Algolia 1Password

版本与发布记录

@eslint/object-schema 共发布 11 个版本,首次发布于 2024/05/31;过去 12 个月发布了 6 个版本。最新版本附带 npm provenance 构建来源证明,可追溯到公开的 CI 构建记录。

版本发布日期距今
3.0.5latest2026/04/086 个月前
3.0.42026/04/047 个月前
3.0.32026/03/078 个月前
3.0.22026/02/208 个月前
3.0.12026/02/078 个月前
3.0.02025/11/1511 个月前

关于 @eslint/object-schema 的常见问题

@eslint/object-schema 是什么?

对象计划合并/验证器

如何安装 @eslint/object-schema?

在项目目录运行 npm install @eslint/object-schema,或使用 pnpm add / yarn add / bun add。

@eslint/object-schema 支持 TypeScript 吗?

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

@eslint/object-schema 支持 ESM 还是 CommonJS?

同时提供 ES Module 与 CommonJS 入口,import 和 require() 都可以使用,打包工具会自动选择合适的版本。

@eslint/object-schema 需要什么版本的 Node.js?

package.json 的 engines 字段要求 Node.js ^20.19.0 || ^22.13.0 || >=24。版本不符时 npm 默认只给出警告,开启 engine-strict 后会拒绝安装。

@eslint/object-schema 可以商用吗?

@eslint/object-schema 使用 Apache-2.0 许可。宽松许可:允许商业使用、修改和再分发,并附带明确的专利授权;分发时需保留许可与 NOTICE 文件,修改过的文件要注明改动。以上为概括,不构成法律意见,请以许可原文为准。

@eslint/object-schema 的下载量有多少?

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

@eslint/object-schema 还在维护吗?

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