繁体   English   中英

Typescript 在子类上的模式匹配

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM