[英]Pattern matching in Typescript over subclasses
假设以下类型层次结构:
interface Animal {
//...
}
class Dog implements Animal {
//...
}
class Cat implements Animal {
//...
}
现在,我的代码中有一个变量let l:Array<Animal> = [new Dog(...),new Cat(...)]
somwhere,我想在该数组上 map 并执行不同的操作,具体取决于无论我是查看Dog
实例还是Cat
实例,在理想情况下使用诸如模式匹配之类的过程。 我正在考虑其他功能语言中的模式匹配,例如 Scala 或 Haskell:
l.map((a:Animal) => match a {case Cat => ..., case Dog => ... })
有哪些方法可以在 TypeScript 中的子类型上编码/模拟这样的模式匹配?
JavaScript 中没有模式匹配语法,因此 TypeScript 中也没有这样的语法(因为那将是运行时语法和 TypeScript)不再添加到 JavaScript,
您可以使用类型保护。 如果您正在处理类,最好使用的类型保护是instanceof
。
let l = [new Cat(), new Dog()];
l.map((a:Animal) =>
a instanceof Dog ? a.isGoodBoy() :
a instanceof Cat ? a.sayName():
a.speak())
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.