我对学习TypeScript感兴趣,但前提是我可以使用它进行功能编码,并尽可能避免使用命令/ OOP。
TypeScript是否通过更好地支持函数式编程的基本JavaScript添加功能?它们是什么?
答案 0 :(得分:19)
JavaScript是一种多范式编程语言。
来自MDN:
多范式编程语言是一种编程语言 支持多种编程范例。一个中心思想 multiparadigm语言是为程序员提供一个框架 可以工作在各种风格,自由混合构造 不同的范例。这种语言的设计目标是允许 程序员使用最好的工具来承认工作,承认单一 范式无法解决最简单或最有效的问题 方式。
支持此视图,JavaScript支持或实际使用各种 样式。例如,它的语法遵循类似C语言的结构, 这是一种过程语言,同时也是JavaScript副本 来自面向对象编程的许多名称和命名约定 语言,Java,但这两种语言在其他方面是无关的 非常不同的语义。 JavaScript中的关键设计原则 取自Self和Scheme编程语言。
TypeScript是JavaScript的超集,这意味着每个JavaScript程序也是一个有效的TypeScript程序。因此TypeScript也是一种多范式编程语言,可以用作函数式编程语言。
您可以通过Michael Fogus的书籍Functional JavaScript学习如何将JavaScript和TypeScript用作函数式编程语言。
另请查看一些开源库:
我认为TypeScript与基本JavaScript相比没有任何额外的FP功能。但是,TypeScript包含一种替代函数语法,称为 lambda语法 ()=>{}
。
我认为这种语法没有添加到TypeScript中以“使语言更具功能性”,而是解决常见的JavaScript问题:dealing with the value of this
。
我们可以争辩说,lambda语法有助于创建比传统JavaScript代码更具功能性的代码。例如,而不是写:
function isBigEnough(value) {
return value >= 10;
}
var filtered = [12, 5, 8, 130, 44].filter(isBigEnough);
我们可以写:
var isBigEnough = (value) => value >= 10;
var filtered = [12, 5, 8, 130, 44].filter(isBigEnough);
或者只是:
var filtered = [12, 5, 8, 130, 44].filter((value) => value >= 10);
TypeScript的类型和类型在函数式编程中也非常重要。阅读AndréStaltz的"Is your JavaScript function actually pure?“以了解原因。
TypeScript 2.0 introduces tagged unions。
标记的联合是一项令人兴奋的新功能,它将F#,Swift,Rust等语言的功能引入JavaScript,同时采用人们今天编写JavaScript的方式。此功能也称为区分联合,不相交联合或代数数据类型。
代数数据类型是函数式编程语言的另一个重要特性。所以我们可以看到TypeScript开始为FP开发人员添加功能。
TypeScript的最后两个版本引入了以下功能:结构类型系统,文字类型,区分联合,映射类型等。因此,类型系统现在可以更好地支持函数式编程用例。