ts-interface-checker

中文文档
1.0.2发布于 2021/10/12Apache-2.0TypeScriptCommonJS零依赖近 30 天下载 1.7亿

用 TypeScript 接口验证数据的运行时库

中文使用文档
文档目录7 节
  1. 安装
  2. 使用量
  3. 检查方法调用
  4. 类型套房
  5. 严格检查
  6. 类型警卫
  7. 类型断言

ts 界面检查器

Build Status npm version

运行时库可以对照TypeScript接口验证数据.

此软件包是运行时对校验器的支持 ts- 界面构建器。 。 。 . 它允许验证数据, 例如解析收到的 JSON 对象 覆盖网络,或解析 JSON 或 YAML 文件,以检查它们是否满足 TypeScript 接口, 并生成信息性错误消息 .

安装

npm install --save-dev ts-interface-builder
npm install --save ts-interface-checker

使用量

假设您有定义接口的 TypeScript 文件 :

// foo.ts
interface Square {
  size: number;
  color?: string;
}

第一步是生成一些运行时间检查代码:

`npm bin`/ts-interface-builder foo.ts

它会产生这样的文件:

// foo-ti.js
import * as t from "ts-interface-checker";

export const Square = t.iface([], {
  "size": "number",
  "color": t.opt("string"),
});
...

现在运行时, 检查一个值是否满足了 Square 界面 :

import fooTI from "./foo-ti";
import {createCheckers} from "ts-interface-checker";

const {Square} = createCheckers(fooTI);

Square.check({size: 1});                  // OK
Square.check({size: 1, color: "green"});  // OK
Square.check({color: "green"});           // Fails with "value.size is missing"
Square.check({size: 4, color: 5});        // Fails with "value.color is not a string"

请注意: ts-interface-builder 仅是建时步骤需要 ts-interface-checker 运行时需要。 这就是为什么建议Npm -inll 前一个使用 --save-dev 旗并使用 --save。 。 。 .

检查方法调用

如果与方法有接口,可以验证方法调用参数并返回值:

// greet.ts
interface Greeter {
  greet(name: string): string;
}

在生成运行时代码后,您现在可以检查诸如:

import greetTI from "./greet-ti";
import {createCheckers} from "ts-interface-checker";

const {Greeter} = createCheckers(greetTI);

Greeter.methodArgs("greet").check(["Bob"]);     // OK
Greeter.methodArgs("greet").check([17]);        // Fails with "value.name is not a string"
Greeter.methodArgs("greet").check([]);          // Fails with "value.name is missing"

Greeter.methodResult("greet").check("hello");   // OK
Greeter.methodResult("greet").check(null);      // Fails with "value is not a string"

类型套房

如果一个类型指另一个文件中定义的类型,则需要告诉界面检查器有关 调用时所有类型名称 createCheckers(). 例如给定

// color.ts
export type Color = RGB | string;
export type RGB = [number, number, number];
// shape.ts
import {Color} from "./color";
export interface Square {
  size: number;
  color?: Color;
}

生成的文件 color-ti.ts 财务报告和审定财务报表 shape-ti.ts 不自动提及对方,但 期待你把他们联系起来 createCheckers() 电话 :

import color from "./color-ti";
import shape from "./shape-ti";
import {createCheckers} from "ts-interface-checker";

const {Square} = createCheckers(shape, color);    // Pass in all required type suites.

Square.check({size: 1, color: [255,255,255]});

严格检查

您可以检查该数据中没有额外的属性 。 请注意,一般不建议 它防止了后向相容性:如果将新属性添加到接口中,那么会更旧 严格检查的代码不会接受.

以上述例子如下:

Square.strictCheck({size: 1, color: [255,255,255], bg: "blue"});    // Fails with value.bg is extraneous
Square.strictCheck({size: 1, color: [255,255,255,0.5]});            // Fails with ...value.color[3] is extraneous

类型警卫

标准 Checker 对象进行类型检查逻辑,但无法制作类型脚本 编译器意识到对象 unknown 类型执行某个接口.

基本代码 :

const unk: unknown = {size: 1, color: "green"};
// Type is unknown, so TypeScript will not let you access the members.
console.log(unk.size); // Error: "Object is of type 'unknown'"

与一个 Checker 备注:

import fooTI from "./foo-ti";
import {createCheckers} from "ts-interface-checker";

const {Square} = createCheckers(fooTI);

const unk: unknown = {size: 1, color: "green"};

if (Square.test(unk)) {
  // unk does implement Square, but TypeScript is not aware of it.
  console.log(unk.size); // Error: "Object is of type 'unknown'"
}

启用现有类型守护功能 test,以及 strictTest 函数, Checker 对象应被投放到 CheckerT<> 使用合适的类型.

使用 CheckerT<>数字 :

import {Square} from "./foo";
import fooTI from "./foo-ti";
import {createCheckers, CheckerT} from "ts-interface-checker";

const {Square} = createCheckers(fooTI) as {Square: CheckerT<Square>};

const unk: unknown = {size: 1, color: "green"};

if (Square.test(unk)) {
  // TypeScript is now aware that unk implements Square, and allows member access.
  console.log(unk.size);
}

类型断言

CheckerT<> 最终将使用 check 财务报告和审定财务报表 strictCheck 函数, 然而,这个功能还没有在TypeScript中完全工作.

版本与发布记录

ts-interface-checker 共发布 19 个版本,首次发布于 2018/01/12;过去 12 个月发布了 0 个版本。

版本发布日期距今
1.0.2latest2021/10/125 年前
1.0.12021/10/115 年前
1.0.02021/04/145 年前
0.2.12021/02/265 年前
0.2.02021/02/215 年前
0.1.132020/08/056 年前

关于 ts-interface-checker 的常见问题

ts-interface-checker 是什么?

用 TypeScript 接口验证数据的运行时库

如何安装 ts-interface-checker?

在项目目录运行 npm install ts-interface-checker,或使用 pnpm add / yarn add / bun add。

ts-interface-checker 支持 TypeScript 吗?

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

ts-interface-checker 支持 ESM 还是 CommonJS?

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

ts-interface-checker 可以商用吗?

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

ts-interface-checker 的下载量有多少?

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

ts-interface-checker 还在维护吗?

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