3

我正在考虑在我的下一个项目中使用 Hyperapp,但我注意到虽然它类似于 Elm,但它不提供类型安全保证(这是 Elm 的最佳特性之一)。是否有 JavaScript 库的组合(可能与 Hyperapp 一起使用)可以为您提供 Elm 所做的类型安全?

4

3 回答 3

4

构建软件的核心是使用具有不同权衡的抽象。Hyperapp 以可靠性为代价权衡了熟悉的语法,因为 Hyperapp 使用的是默认可变的 JavaScript。使用可变变量,您无法做出保证,因为它的定义是不确定的。但是,您可以测试代码以使其更具确定性。但是,这是另一个权衡。

长话短说,如果你想要类型安全,你不能只依赖 JavaScript。你可以像 Purescript、Fable 和 Elm 一样转换成 JavaScript。如果您想要更高的可靠性,我建议您花时间学习其中一种语言。

祝你好运!

于 2018-03-02T00:58:25.703 回答
3

Hyperapp 提供了许多您需要的基本工具,用于以函数式风格构建应用程序,同时保留在 JavaScript 生态系统中,无需构建步骤即可开始。这比 Elm 和 Reason 等更严格的解决方案要低得多。

如果您考虑从命令式风格到功能性风格的比例,例如表盘,Hyperapp 通过将表盘转到功能性的一半来启动您。作为用户,您可以决定如何旋转该表盘。如果您必须集成需要偷偷摸摸的 DOM 操作的恶意 API,那么您有逃生口,可以将您带出虚拟 DOM 层并访问较低级别的 DOM。相反,如果借助受 Elm 启发的工具(如数据效果) ,您能够使用完全纯函数编写您的应用程序,那么您可以以很少的成本获得许多相同的好处。

最重要的是 - 我相信不要将类型安全与正确性混为一谈是很重要的。来自 Clojure 世界的 Rich Hickey 有一张图表,显示了我个人同意的编程问题:编程问题 请注意,静态类型是解决此层次结构中编程中最不重要问题的解决方案。如果您想了解更多有关 Hickey 对类型的想法的详细信息,我鼓励您查看他的Clojure/Conj 2017 主题演讲

于 2018-03-02T07:43:01.027 回答
1

我将 Hyperapp 与 TypeScript 一起使用,到目前为止它运行良好。有tsconfig选项

"jsx": "react",
"jsxFactory": "h",

甚至可以使用 JSX。

TypeScript 启用了 ES6+ 功能并添加了类型。它还转译为可读的 JavaScript 代码。

于 2018-03-31T16:45:16.917 回答