可以在Rust中扩展结构吗?



我不太了解Rust,当我需要检查是否有可能使用它的类型系统做一些有趣的事情时,我就会研究它。我提出了一个问题,是否有可能将下面用TS编写的类型定义转换为Rust。

type Data = {
path: String
name: String
}
enum Type {
CSV,
JPG,
PNG
}
type CSV = Data & {
type: Type.CSV
}
type JPG = Data & {
type: Type.PNG
}
type PNG = Data & {
type: Type.PNG
}
// To avoid conflicts with the already reserved type File
type MyFile = CSV | PNG | JPG

我一直试图谷歌的东西,如果它是可能的扩展结构在Rust中,不幸的是没有找到任何回答我的好奇心。

不,在Rust中不能扩展结构。

无论如何,试图在这个Typescript示例和等价的Rust之间进行直接转换是不习惯的。你可能想要这样组织它:
enum Kind {
Csv,
Jpg,
Png,
}
struct MyFile {
kind: Kind,
path: String,
name: String,
}

或者像这样:

struct Data {
path: String,
name: String,
}
enum MyFile {
Csv(Data),
Jpg(Data),
Png(Data),
}

取决于您的路径/名称与文件类型的耦合。

最新更新