我是 PureScript 的新手。我在 Purescript 中搜索密封类以了解如何实现这一点,但我认为我还没有必要的 PS 术语。
PureScript 中拥有一堆扩展“基本”记录的记录的规范方式是什么,但随后有一个总和类型表示这些记录的“密封”集合。
就像在 Kotlin 中一样,
sealed class Glazing(val name: String, val area: Int) {
class Window(val name: String, val area: Int, val frameMaterial: String): BaseGlazing(name, area)
class Door(val name: String, val area: Int, val isPreHung: Boolean): BaseGlazing(name, area)
}
在 TypeScript 中,你可能会做类似的事情
interface BaseGlazing { ... }
interface Door extends BaseGlazing { ... }
interface Window extends BaseGlazing { ... }
type Glazing = Door | Window
and then you'd either take `A extends BaseGlazing` or `Glazing` (and use type guards) to do either of those two above functions.
本质上,我想要一个基类(在技术上是抽象的),扩展它的东西,然后是扩展的总和类型/可区分联合,这样我就可以写,说,changeName:: Glazing -> Glazing
(前提是基类有一个name
道具)但是也可以做类似的事情calculateTotalLightPenetration :: Array Glazing -> Number
(前提是有区别的联合是其中之一,Door
或者Window
因为光穿透将是门与窗的不同公式)