You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在TypeScript中获取Policy联合类型包含的接口列表

自动提取TypeScript联合类型成员列表(适配自动更新的Proto生成文件)

你需要从自动生成的Proto TypeScript文件中提取Policy联合类型包含的所有接口名称,且要应对文件后续自动新增成员的情况,以下是几种可行方案:

方案1:构建时脚本自动提取(推荐)

编写Node.js脚本,读取目标文件并通过正则匹配提取联合类型成员,可集成到构建流程中自动执行:

const fs = require('fs');
const path = require('path');

// 替换为你的Proto生成文件路径
const filePath = path.resolve(__dirname, './generated-policy.ts');
const content = fs.readFileSync(filePath, 'utf8');

// 匹配Policy联合类型定义
const policyUnionRegex = /export type Policy\s*=\s*([\s\S]*?);/;
const matchResult = content.match(policyUnionRegex);

if (matchResult) {
  // 提取并清理成员列表
  const policyMembers = matchResult[1]
    .split('|')
    .map(item => item.trim())
    .filter(Boolean);
  
  const result = JSON.stringify(policyMembers);
  console.log(result);
  // 可将结果写入文件供后续使用
  fs.writeFileSync(path.resolve(__dirname, './policy-members.json'), result);
} else {
  console.error('未找到Policy联合类型定义');
}

将脚本加入项目的npm scripts(例如"extract-policy": "node extract-policy.js"),每次Proto文件更新后运行脚本,即可自动得到最新的成员数组。

方案2:类型约束下的运行时映射

利用TypeScript的类型约束,在代码中维护一份与联合类型同步的成员数组,新增成员时会触发编译错误提醒更新:

// 导入生成文件中的类型
import type { Policy } from './generated-policy';

// 定义成员数组,通过类型约束确保与联合类型匹配
export const POLICY_MEMBERS = ['UserPolicy', 'BrandPolicy', 'OrganizationPolicy'] as const;

// 类型断言:如果数组与联合类型不一致,编译会报错
type PolicyMember = typeof POLICY_MEMBERS[number];
type _AssertMatch = Policy extends { type: `${Uppercase<PolicyMember>}_POLICY` } ? true : false;
const _assert: _AssertMatch = true;

这种方式无需额外脚本,新增成员时编译错误会强制你更新数组,适合轻量场景。

临时手动提取(一次性需求)

如果仅需临时获取,直接从export type Policy的定义中复制各接口名称,整理为如下数组即可:

['UserPolicy', 'BrandPolicy', 'OrganizationPolicy']

内容的提问来源于stack exchange,提问作者Roee Gavirel

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.21 01:30:06