当我有下面的数据结构时,我有下面的typescript枚举/联合类型的问题
type Options = SingleOptions | DualDiffOptions
enum Modes {
Single = "Single",
DualDiff = "DualDiff",
}
type SingleOptions = {
on_temp: String;
off_temp: String;
sensor_channel: String;
};
type DualDiffOptions = {
sensor_cold_side: String;
sensor_hot_side: String;
on_temp: String;
off_temp_diff: String;
};
type Data = {
mode: Mode.Single;
options: Options;
};
let data: Data = {
mode: Modes.Single,
options: {
on_temp: "22",
off_temp: "23",
sensor_channel: "ch1",
},
};
当我现在使用数据对象时,typescript不能真正弄清楚它是单选项还是双区分选项,如何处理这种情况..?
<div>
{#if data.mode == Modes.Single}
<div>
{data.options.on_temp}
</div>
<div>
{data.options.off_temp}
</div>
<div>
{data.options.sensor_channel}
</div>
{/if}
{#if data.mode == Modes.DualDiff}
<div>
{data.options.on_temp}
</div>
<div>
{data.options.off_temp_diff}
</div>
<div>
{data.options.sensor_cold_side}
</div>
<div>
{data.options.sensor_hot_side}
</div>
{/if}
</div>
在rust中,你可以用不同的选项结构体创建一个选项枚举。但是这在 typescript 中似乎是不可能的。
我是打字新手,想学它,因为我有点喜欢类型,现在在学习生 rust 后,但我可以看到打字枚举不是很有用。与生 rust 相比。
一个人怎样处理 typescript 中这种事情呢?
这不工作,因为枚举只接受值而不接受类型
enum Options {
Single = SingleOptions;
DualDiff = DualDiffOptions;
}
type Data = {
mode: Mode.Single;
options: Options;
};
let data: Data = {
mode: Modes.Single,
options: Options.Single {
on_temp: "22",
off_temp: "23",
sensor_channel: "ch1",
}
}
问候。
1条答案
按热度按时间xwbd5t1u1#
您必须显式地将
Mode
链接到选项的类型,以告诉TypeScript单模式具有单选项,双模式具有双选项。最简单的方法是使用区分联合
对于这段代码,你基本上是说类型Data可以有两种形式,一种是mode等于single,在这种情况下选项应该是SingleOptions的形式,另一种是dual diff