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

如何用TypeScript定义仅含单个属性的元数据数组类型?

用TypeScript表达指定Meta数组类型的方案

完全可行,根据需求可以选择两种类型定义方式:

基础兼容型(宽松匹配)

如果只需匹配「每个对象以URI为键、值为任意类型」的结构,无需严格限制属性数量,可直接定义:

// 单个元数据项:键为任意URI字符串,值支持任意类型
type MetaItem = { [uri: string]: unknown };

// Meta数组类型
type MetaArray = MetaItem[];

示例用法:

const meta: MetaArray = [
  {"http://example.com/rel/1/" : "my meta 14"},
  {"http://example.com/rel/2/" : "345"}
];

严格单属性型(限制仅一个键)

如果需要强制每个元数据项只能包含一个属性(避免多键错误),可以通过条件类型实现约束:

// 辅助类型:判断对象是否仅含单个属性
type IsSingleProperty<T> = keyof T extends string 
  ? [keyof T] extends [never] 
    ? false 
    : string extends keyof T 
      ? false 
      : true 
  : false;

// 严格版元数据项:仅允许单个URI键,值为任意类型
type StrictMetaItem = { [uri: string]: unknown } & {
  [K in keyof this]: IsSingleProperty<this> extends true ? unknown : never;
};

// 严格版Meta数组
type StrictMetaArray = StrictMetaItem[];

此时若传入含多键的对象,TypeScript会直接报错:

// ❌ 类型错误:对象包含多个属性,不符合StrictMetaItem约束
const invalidMeta: StrictMetaArray = [
  {"http://example.com/rel/1/" : "my meta 14", "extraKey": "invalid"}
];

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 13:07:20