Typescript 中没有符合您要求的特定ObjCollection
类型.相反,您可以像这样定义一个generic类型
type ObjCollection<K extends PropertyKey> =
{ [P in K]: { id: P } }
它表达了这一思想,但它取决于提供与一组键相对应的类型参数.所以你的objcollection
应该是ObjCollection<"key1" | "key2" | "key3">
类型的.为了避免您自己编写该代码,您可以编写一个通用的助手函数,让编译器进行推断:
const asObjCollection = <K extends PropertyKey>(
oc: ObjCollection<K>) => oc;
然后,你会写const objcollection = asObjCollection({⋯})
,而不是写const objcollection: ObjCollection = {⋯}
.它不一样,但很接近,它给了你想要的行为:
const objcollection = asObjCollection({
key1: { id: "key1" },
key2: { id: "key2" },
key3: { id: "key33333" } // error!
});
Playground link to code个