在Haskell中,我们可以声明新类型,使我们可以隐藏对基础数据类型的访问。这样,我们就可以通过不暴露底层数组之类的东西(从而使库的用户无法超出范围)来在模块中创建更安全的API。
Typescript中是否有类似于新类型的东西?
答案 0 :(得分:2)
FWIW具有单个私有字段的类或多或少是同一件事,因此,这并非严格要求需要的关键字。
还要注意,Haskell中的newtype
并不是真正的封装,尽管您可以使用它的方式-它是为了使同一结构表示形式具有不同的类型,以防止意外滥用并允许类型基于类型类的临时多态性。 Haskell的data
的工作方式几乎相同,除了实现上的细节外,newtype A = A X
和data 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