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

如何为键是另一类型键子集的对象定义TypeScript类型

正确的TypeScript类型定义方式

你需要的是键为Metadata类型键的子集,值为字符串数组的类型,Partial<Metadata>之所以不对,是因为它只是把Metadata的每个属性变为可选,但属性值的类型还是原类型(比如name还是string而非string[])。

有两种常用的正确写法:

写法一:Partial<Record<keyof Metadata, string[]>>

直接通过Record将Metadata的所有键映射为string[]类型,再用Partial让所有键变为可选(即允许只包含子集):

const main = {
  name: ["main", "master"],
  size: ["size"],
  date: ["date"],
  language: ["lang", "language"]
} as Partial<Record<keyof Metadata, string[]>>;

写法二:自定义映射类型

通过映射类型直接定义,效果和上面一致:

type MetadataKeyMap = {
  [K in keyof Metadata]?: string[];
};

const main = {
  name: ["main", "master"],
  size: ["size"],
  date: ["date"],
  language: ["lang", "language"]
} as MetadataKeyMap;

这两种写法都能严格限制只能使用Metadata中存在的键(避免拼写错误),当你不小心写了Metadata里没有的键时,TypeScript会抛出类型错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 06:25:30