thS*_*oft 10 pattern-matching algebraic-data-types typescript
不幸的是,从0.9.5开始,TypeScript(尚未)具有代数数据类型(联合类型)和模式匹配(用于解构它们).更重要的是,它甚至不支持接口上的instanceof.您使用哪种模式来模拟具有最大类型安全性和最小样板代码的这些语言功能?
我去下面访问者状图案,通过激发此和本(在本例中,Choice可以是Foo或Bar):
interface Choice {
match<T>(cases: ChoiceCases<T>): T;
}
interface ChoiceCases<T> {
foo(foo: Foo): T;
bar(bar: Bar): T;
}
class Foo implements Choice {
match<T>(cases: ChoiceCases<T>): T {
return cases.foo(this);
}
}
class Bar implements Choice {
match<T>(cases: ChoiceCases<T>): T {
return cases.bar(this);
}
}
Run Code Online (Sandbox Code Playgroud)
用法:
function getName(choice: Choice): string {
return choice.match({
foo: foo => "Foo",
bar: bar => "Bar",
});
}
Run Code Online (Sandbox Code Playgroud)
匹配本身具有表现力和类型安全性,但是要为类型编写很多样板文件.
| 归档时间: |
|
| 查看次数: |
3111 次 |
| 最近记录: |