gpt4 book ai didi

javascript - 您将如何在 TypeScript 中进行模式匹配?

转载 作者:行者123 更新时间:2023-11-30 14:37:27 25 4
gpt4 key购买 nike

建议使用哪些方法来执行类似于 TypeScript 中的模式匹配的操作?到目前为止,我所做的最好的事情是为每个元组接口(interface)提供唯一的 "tag" 值,并基于该值执行 switch/case 语句。

interface First { tag: 'one' }
interface Second { tag: 'two' }
type Third = First | Second

function match<T>(input: Third): T {
switch( input.tag ){
case 'one': {
...
}
case 'two': {
...
}
default: {
...
}
}
}

在我看来,这仍然是一种不友好且无效率的方法。

由于 TypeScript 不是一流的类型,我自己也不太确定你能把它推进到什么程度,但我想试一试。

最佳答案

也许为此使用一个枚举

enum Tag {
One,
Two,
Three
}

interface Taggable {
tag: Tag
}

interface Alpha extends Taggable {
tag: Tag.One
a: number
}

interface Bravo extends Taggable {
tag: Tag.Two
b: number
}

function match<gTaggable extends Taggable = Taggable>(
taggable: gTaggable
): gTaggable {
switch(taggable.tag) {

case Tag.One: {
const {tag, a} = taggable
// ...
break
}

case Tag.Two: {
const {tag, b} = taggable
// ...
break
}

default: {
throw new Error(`unknown taggable "${taggable.tag}"`)
}
}
}

如果你觉得特别调皮,你可以考虑使用符号而不是枚举来处理这样的事情

关于javascript - 您将如何在 TypeScript 中进行模式匹配?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50202592/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com