Skip to content

Instantly share code, notes, and snippets.

@condorheroblog
Created March 10, 2022 03:35
Show Gist options
  • Save condorheroblog/a84d8e88a3bc4f0b4b7b3716a670600a to your computer and use it in GitHub Desktop.
Save condorheroblog/a84d8e88a3bc4f0b4b7b3716a670600a to your computer and use it in GitHub Desktop.

JS 新语法类型作为注释

Python 和 JavaScript 中的类型

Python 和 JavaScript 都是一种动态弱类型语言,随着开发的应用变得越来越复杂,为了提升代码运行时的健壮性。

  1. Python 从 3.5 开始加入了类型检查,但是这个类型检查只是作用在开发阶段,代码运行的时候依然采用忽略类型检查的策略。
  2. JavaScript 采用开发时使用 TypeScript 检查,上线的代码是 TypeScript 编译成的 JavaScript 代码。

Python 和 JavaScript 采用的思路基本一致即开发时进行类型检查,不同的是 Python 类型检查获得了本身语法层面的支持,而 JavaScript 打了个折,但目的也是达到了的。

认识 JSDoc

类型检查是在开发阶段开启的,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 的编译流程:

TypeScript 开发流程

假如 JavaScript 的注释能变得像 TypeScript 的 JSDoc 一样,我们的开发流程就可以优化成这样:

JS Type 开发流程

相较于 TypeScript 的开发流程少了一步编译,这个开发流程基本和 Python 的类型检查一致了,这时我们可以像 Python 借助 mypy 进行类型检查报错一样,JS 注释类型可以借用 VSCode 或 TypeScript 等工具做类型报错检查。

type-checking

需要指出,JSDoc 去做类型检查,简单的变量函数返回类型等能获得好的支持,但是枚举、命名空间等功能可能就要动点脑筋了。

JS 类型作为注释提案请看:A Proposal For Type Syntax in JavaScript

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment