Python 和 JavaScript 都是一种动态弱类型语言,随着开发的应用变得越来越复杂,为了提升代码运行时的健壮性。
- Python 从 3.5 开始加入了类型检查,但是这个类型检查只是作用在开发阶段,代码运行的时候依然采用忽略类型检查的策略。
- JavaScript 采用开发时使用 TypeScript 检查,上线的代码是 TypeScript 编译成的 JavaScript 代码。
Python 和 JavaScript 采用的思路基本一致即开发时进行类型检查,不同的是 Python 类型检查获得了本身语法层面的支持,而 JavaScript 打了个折,但目的也是达到了的。
类型检查是在开发阶段开启的,JavaScript 社区还有一种比较流行的方案,那就是 JSDoc,通过注释来约定变量、函数、类、模块等等的类型,例如:
/**
* @param {string} somebody - Somebody's name.
*/
export function sayHello_name_type_hyphen_desc(somebody) {
alert('Hello ' + somebody);
}
JSDoc 只是开发注释,本质的目的是为了程序简单易读,并没有像 TypeScript 一样通过工具强制进行类型检查。
我们知道 TypeScript 是可以进行 JavaScript 类型检查的,还可以在 JavaScript 定义类型,定义类型也是通过 JSDoc 来实现的,现在 TypeScript 的 JSDoc 借助 TypeScript 是可以进行类型报错的,而不仅仅是为了易读。
我们来看看现在 TypeScript 的编译流程:
假如 JavaScript 的注释能变得像 TypeScript 的 JSDoc 一样,我们的开发流程就可以优化成这样:
相较于 TypeScript 的开发流程少了一步编译,这个开发流程基本和 Python 的类型检查一致了,这时我们可以像 Python 借助 mypy 进行类型检查报错一样,JS 注释类型可以借用 VSCode 或 TypeScript 等工具做类型报错检查。
需要指出,JSDoc 去做类型检查,简单的变量函数返回类型等能获得好的支持,但是枚举、命名空间等功能可能就要动点脑筋了。
JS 类型作为注释提案请看:A Proposal For Type Syntax in JavaScript