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}
,但我认为这绝对不是您想要的,我不关心编译阶段之后的情况。