如何为键是另一类型键子集的对象定义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
相关产品推荐
相关产品推荐

