【问题标题】:Spreading keys of an interface inside another type in typescript在打字稿中的另一种类型中传播接口的键
【发布时间】:2022-11-13 14:23:30
【问题描述】:

我有一些这样的类型:

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 types


    【解决方案1】:

    有一个交叉点:

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

    【讨论】:

      猜你喜欢
      • 2021-01-03
      • 1970-01-01
      • 2021-04-18
      • 2022-10-12
      • 2018-01-18
      • 2020-08-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多