如何对其中一个属性可能具有不同名称的对象进行类型安全



假设我想键入一个对象,其中我不知道其中一个属性的名称,但知道其值的类型。所以它是这样的:

type PagedResponse<T> = {
Suppliers: Array<T>; // <- this prop might have different name
nextPageToken: number;
total: number;
};

Suppliers道具可能有不同的名称-Products或其他任何名称,但它的类型应该是Array<T>。我该如何键入这样的内容?是否可以将最后一个道具的名称作为另一个参数传递给类型。

试试这个:

type PagedResponse<T, K extends string = string> = {
nextPageToken: number;
total: number;
} & {
[P in K]: Array<T>;
}
const response: PagedResponse<number, 'Products'> = {
Products: [1, 2, 3],
total: 10,
nextPageToken: 20
}

您可以执行类似的操作

type PagedResponse<T> = {
[prop: string]: Array<T>; // <- this prop might have different name
nextPageToken: number;
total: number;
};

相关内容

最新更新