Haskell在Typescript中的新类型?

时间:2019-03-14 04:51:08

标签: typescript haskell types

在Haskell中,我们可以声明新类型,使我们可以隐藏对基础数据类型的访问。这样,我们就可以通过不暴露底层数组之类的东西(从而使库的用户无法超出范围)来在模块中创建更安全的API。

Typescript中是否有类似于新类型的东西?

2 个答案:

答案 0 :(得分:2)

FWIW具有单个私有字段的类或多或少是同一件事,因此,这并非严格要求需要的关键字。

还要注意,Haskell中的newtype并不是真正的封装,尽管您可以使用它的方式-它是为了使同一结构表示形式具有不同的类型,以防止意外滥用并允许类型基于类型类的临时多态性。 Haskell的data的工作方式几乎相同,除了实现上的细节外,newtype A = A Xdata A = A X之间的区别在哲学上比技术上更重要。

答案 1 :(得分:0)

作为后续,还有另一种方法可以引入类似于 newtypes 的东西。

您可以执行以下操作:

type Seed = number & {readonly Seed: unique symbol}

const createSeed = randomNumberBetween0And1() as Seed

const doSomethingWithSeed = (s: Seed) => {...}

doSomethingWithSeed(1) // will complain
doSomethingWithSeed(createSeed()) // Will not complain