Skip to content
English

matchRule ​

CORE · function · 运行时值

Dispatch to the first matching rule.

A rule without a pattern matches unconditionally, so the table's order decides precedence. The first match owns the result even when its handler returns undefined, and later rules are not consulted.

导入 ​

ts
import { matchRule } from '@jangts/agent-core/support';
js
import { matchRule } from '@jangts/agent-core/support';

其他公开入口:@jangts/agent-core、@jangts/agent-core/types、@jangts/agent-core/support。

定义 ​

泛型参数 ​

类型参数约束默认类型
Input——
Result——

调用 ​

ts
matchRule<Input, Result>(rules: readonly MatchRule<Input, Result>[], input: Input): Result | undefined

Dispatch to the first matching rule.

A rule without a pattern matches unconditionally, so the table's order decides precedence. The first match owns the result even when its handler returns undefined, and later rules are not consulted.

类型参数约束默认类型
Input——
Result——
参数类型传递说明
rulesreadonly MatchRule<Input, Result>[]必需—
inputInput必需—

返回: Result \| undefined。

等待后的值: Awaited<Result> \| undefined。

使用示例 ​

一个明确的拒绝 ​

入门 · Node.js

ts
import { Support } from '@jangts/agent-core';
const input = '你好';
Support.breakWhile(!input.trim(), '问题不能为空');
console.log(input);
js
import { Support } from '@jangts/agent-core';
const input = '你好';
Support.breakWhile(!input.trim(), '问题不能为空');
console.log(input);

有依赖关系的检查按序求值 ​

配置 · Node.js

ts
import { Support } from '@jangts/agent-core';
const input: unknown = { name: 'Ivan' };
Support.breakWhile([
  { occur: !input || typeof input !== 'object', error: '需要对象' },
  { occur: () => !('name' in (input as object)), error: '缺少 name' },
]);
console.log(input);
js
import { Support } from '@jangts/agent-core';
const input = { name: 'Ivan' };
Support.breakWhile([
    { occur: !input || typeof input !== 'object', error: '需要对象' },
    { occur: () => !('name' in input), error: '缺少 name' },
]);
console.log(input);

声明式优先分发与顺序转换 ​

扩展 · Node.js

ts
import { Support } from '@jangts/agent-core';
const routeName = Support.matchRule([
  { id: 'status', description: '状态意图', pattern: (input: string) => input === 'status', handle: () => 'service' },
  { id: 'fallback', description: '其他意图', handle: () => 'reply' },
], 'status');
const state = { answer: '  服务正常  ' };
Support.walkRules([
  { handle: (value: typeof state) => { value.answer = value.answer.trim(); } },
  { pattern: (value: typeof state) => !!value.answer, handle: value => { value.answer += '。'; } },
], state);
console.log(routeName, state.answer);
js
import { Support } from '@jangts/agent-core';
const routeName = Support.matchRule([
    { id: 'status', description: '状态意图', pattern: (input) => input === 'status', handle: () => 'service' },
    { id: 'fallback', description: '其他意图', handle: () => 'reply' },
], 'status');
const state = { answer: '  服务正常  ' };
Support.walkRules([
    { handle: (value) => { value.answer = value.answer.trim(); } },
    { pattern: (value) => !!value.answer, handle: value => { value.answer += '。'; } },
], state);
console.log(routeName, state.answer);

相关策略源码 ​

相关定义 ​

接口参考、使用示例与开发指南。