与JavaScript相比,TypeScript提供了哪些额外的功能编程功能?

时间:2015-05-08 08:22:06

标签: functional-programming typescript

我对学习TypeScript感兴趣,但前提是我可以使用它进行功能编码,并尽可能避免使用命令/ OOP。

TypeScript是否通过更好地支持函数式编程的基本JavaScript添加功能?它们是什么?

1 个答案:

答案 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);

更新2

TypeScript的类型和类型在函数式编程中也非常重要。阅读AndréStaltz的"Is your JavaScript function actually pure?“以了解原因。

TypeScript 2.0 introduces tagged unions

  

标记的联合是一项令人兴奋的新功能,它将F#,Swift,Rust等语言的功能引入JavaScript,同时采用人们今天编写JavaScript的方式。此功能也称为区分联合,不相交联合或代数数据类型

代数数据类型是函数式编程语言的另一个重要特性。所以我们可以看到TypeScript开始为FP开发人员添加功能。

更新3

TypeScript的最后两个版本引入了以下功能:结构类型系统,文字类型,区分联合,映射类型等。因此,类型系统现在可以更好地支持函数式编程用例。