在typescript中将一个接口的键扩展到另一个类型中

wrrgggsh  于 2022-11-18  发布在  TypeScript
关注(0)|答案(1)|浏览(132)

我有这样一些类型:

export interface PublicFileData {
  bucketName?: string;
  objectName?: string;
}
export interface PrivateFileData {
  id: string;
}
// Above types are imprted from other packages

export type Storage =
  | { type: "public"; data: PublicFileData }
  | { type: "private"; data: PrivateFileData };

它可以工作。但是在不知道FileData类型的情况下,如何将它更改为这样的平面对象?

export type Storage =
  | {
      type: "public";
      bucketName?: string;
      objectName?: string;
    }
  | { 
      type: "private"; 
      id: string 
    };

我无法手动执行此操作,因为FileData类型是从其他位置导入的
也许我需要一个缺失的传播类型运算符!!!

// I wish I had something like this:
export type Storage =
| { type: "public"; ...PublicFileData }
| { type: "private"; ...PrivateFileData };

这怎么可能在 typescript 中实现呢?

p8ekf7hl

p8ekf7hl1#

具有交叉点:

export type Storage =
  | ({ type: "public"} & PublicFileData )
  | ({ type: "private"} & PrivateFileData );

相关问题