专栏名称: OSC开源社区
OSChina 开源中国 官方微信账号
目录
相关文章推荐
程序猿  ·  .NET 9 正式发布! ·  3 天前  
OSC开源社区  ·  PaddleScience——击破科学计算痛 ... ·  4 天前  
OSC开源社区  ·  中国软件要出海,不能总是单打独斗 ·  4 天前  
OSC开源社区  ·  微软Visual ... ·  1 周前  
OSC开源社区  ·  MySQL亿级数据平滑迁移实战 ·  1 周前  
51好读  ›  专栏  ›  OSC开源社区

类型签名在 Javascript 中的探索

OSC开源社区  · 公众号  · 程序员  · 2017-01-02 08:34

正文

长按图片识别二维码报名参与码云用户见面交流会


简介


类型签名轻轻诉说着函数最不可告人的秘密。短短一行,就能暴露函数的行为和目的。O(∩_∩)O~


作用


虽然js是动态类型的语言,但并不意味否定类型的存在,我们在写代码的时候还是要和Number,Boolean,String,Array等打交道,只不过没有在语言层面做类型检查。

  • 简洁美观(对于我来说这一点就足够了)

  • 降低阅读代码成本

  • 有效节约沟通成本(附带装X技能) 以下是描述同一个函数的

    • A:fs.readFile 函数有三个参数 第一个是字符串的文件路径,第二个是编码,第三个是回掉函数 回掉函数内部第一个代表错误,第二个代表文件内容(字符串) 无返回值

    • B:fs.readFile :: String:路径 -> String:编码 -> (Error -> String) -> ()

    • C:fs.readFile :: String -> String -> (Error -> String) -> ()

  • 编译期间检查错误(js未实现)

  • 生成文档

简单的例子



add 上方的一行注释描述了函数从入参到返回值的过程,即 add 函数接受两个数字返回数字

  • Number代表数字类型

  • 最后一个Number 代表函数返回值的类型 前面两个Number分别代表函数的第一参数和第二个参数

数组 函数


js中有两个常用的类型,数组和函数,数组的类型可以写成Array,函数的类型可以写成Function。但这样的话我们从类型签名上获得的信息就很有限了,比如数组里面是什么?函数需要几个参?返回值是什么?

数组的类型可以写成 [String] 代表数组内部是String的类型

ps:其实数组可以看做容器 容器里面是什么还是要写上的,Promise也可以看做容器 比如类型可以写成 Promsie String


  • 所有的类型都是以大写开头,小写的 a 是类型变量 默认是代表任意类型(可以加约束)

  • everyLength 函数 输入一个字符串数组返回一个数字数组

  • length 输入一个数组返回一个数字

函数可以写成 (String -> String) 即在原有的基础上加上一个括号 代表一个函数


  • a 和 b 是两个类型变量

  • map 函数: 第一个参数是一个函数(该函数接收一个类型 a 返回一个类型 b) 第二个参数数组 数组内部的类型是 a(和前面函数 a 是相同的类型),返回值是数组其内部类型是 b (和前面函数的返回值保持一致)

  • 通过类型签名是不是可以获取到很多有效的信息 ^_^

可选参数的函数


我是不建议写带有可选参数,默认参数的函数的,这样会使函数产生多语意。更好的解决办法是写多个函数。如下,多选参数的函数就要写多个类型签名了


该函数可以通过两种方式去调用

  1. 传 Url 返回 Buffer

  2. 传 URL 和 encoding 返回 String

json 配置 和 无参 无返回值


有很多时候我们写的json是没有具体类型的,可以通过{必要的key:类型} 来进行描述 如下:


  • () 表示无返回值

对象方法


javascript 中的函数是可以使用this的 这种函数叫方法


  • this 类型写在最前面 由于 this 不是一个参数 所以用 ~> 代替 -> 其它的保持不变

总结


以下是对类型的描述总结

  • Number 数字

  • String 字符串

  • [a] 数组

  • (a -> b -> c) 函数

  • () 无返回值 或者 无参数

  • Promise

  • {} json

  • this x ~> x




推荐阅读

开源中国 2017 元旦寄语

Win10 Build 14997 界面曝光;JVM 开发语言 Kotlin 发布新版 | 软件周刊

小程序来了,它的命运如何?崛起?还是…… | 源资讯

8 分钟回顾开源巨头 Facebook 的 2016

2016 年 Web 开发工具新生热门榜

OpenSource 2016 年十大最佳开源项目揭晓,你最爱用哪款?

点击“阅读原文”查看更多精彩内容