Typescript 如何对属性之一可能具有不同名称的对象进行类型安全保护?

Typescript 如何对属性之一可能具有不同名称的对象进行类型安全保护?,typescript,typescript-generics,Typescript,Typescript Generics,假设我想键入一个对象,其中我不知道某个属性的名称,但知道其值的类型。所以是这样的: type PagedResponse<T> = { Suppliers: Array<T>; // <- this prop might have different name nextPageToken: number; total: number; }; 类型PagedResponse={ 供应商:阵列;//尝试以下操作: type PagedResponse<

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

type PagedResponse<T> = {
  Suppliers: Array<T>; // <- this prop might have different name
  nextPageToken: number;
  total: number;
};
类型PagedResponse={
供应商:阵列;//尝试以下操作:

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
}
类型PagedResponse={
nextPageToken:编号;
总数:个;
} & {
[P in K]:数组;
}
常量响应:PagedResponse={
产品:[1,2,3],
总数:10,
下一站:20
}
试试这个:

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
}
类型PagedResponse={
nextPageToken:编号;
总数:个;
} & {
[P in K]:数组;
}
常量响应:PagedResponse={
产品:[1,2,3],
总数:10,
下一站:20
}

您可以这样做

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

[prop:string]:数组;//您可以这样做

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

[prop:string]:Array;//我怀疑这是否可能,因为类型信息将在编译阶段后被删除。不过您可以做的是
type PagedResponse={[key:string]:Array;nextPageToken:number;total:number}
,但我认为这绝对不是您想要的,我不关心编译阶段后的情况。我怀疑这是否可能,因为类型信息将在编译阶段后删除。您可以做的是
type PagedResponse={[key:string]:Array;nextpGetOken:number;total:number}
,但我认为这绝对不是您想要的,我不关心编译阶段之后的情况。