假设以下类型层次结构:
interface Animal {
//...
}
class Dog implements Animal {
//...
}
class Cat implements Animal {
//...
}
现在,我有一个变量 let l:Array<Animal> = [new Dog(...),new Cat(...)]
在我的代码中的某个位置,我想映射该数组并根据我是否查看 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())
关于typescript - Typescript 中子类的模式匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70957028/