TypeScript
编译后的 JavaScript
文件并不具备类型检查的功能,因为 JavaScript
语言本身是动态类型、弱类型的,在运行时无法推断变量的类型,只能在编译时推断。而将 TypeScript
文件编译成 JavaScript
文件时,会把 TypeScript 中的类型声明和类型检查都去掉,只保留 JavaScript
代码,所以 TypeScript
编译后的JavaScript
文件并不能进行类型检查。
如果需要在 JavaScript
中进行类型检查,可以使用像 JSDoc、Flow、PropTypes 等第三方工具进行类型声明和类型检查,但与 TypeScript
相比,它们的类型检查功能都比较有限。因此,如果需要更严格的类型检查,更推荐使用 TypeScript
。
当使用 JSDoc 进行类型声明时,我们需要在注释中使用特定的语法来描述参数和返回值类型。下面是一个使用 JSDoc 进行类型校验的例子:
/**
* 返回两数之和
* @param {number} a 第一个加数
* @param {number} b 第二个加数
* @returns {number} 两数之和
*/
function add(a, b) {
return a + b;
}
console.log(add(1, 2)); // 3
console.log(add(1, "2")); // "12"
在上面的例子中,我们使用 @param
注释描述了第一个加数 a
和第二个加数 b
的类型,使用 @returns
注释描述了函数返回值的类型。在代码中,如果我们传入了不符合类型要求的参数,比如使用字符串 "2"
代替数字 2
,则会得到一个错误的结果。
需要注意的是,JSDoc 只提供了注释的形式进行类型声明,并不会进行类型检查。即使我们通过注释声明了参数和返回值类型,但 JavaScript 并不会对其进行类型检查,仍将维持原本的动态、弱类型特性。
JSDoc也可以参考类似于 JSDoc 文档参考这样的文档
下面是一个使用 Flow 进行类型检查的完整项目例子:
- 安装 Flow:
npm install -g flow-bin
- 在项目根目录下创建
.flowconfig
配置文件,并添加以下配置:
[ignore]
<PROJECT_ROOT>/node_modules/.*
[include]
[libs]
[options]
module.system=node
- 在项目中初始化
package.json
文件:
npm init -y
- 安装项目依赖:
npm install --save-dev flow-bin
- 在
package.json
文件中添加scripts
配置:
{
"name": "flow-example",
"version": "1.0.0",
"main": "index.js",
"scripts": {
"flow": "flow"
},
"devDependencies": {
"flow-bin": "^0.153.0"
}
}
- 在
src
目录下创建index.js
文件,并添加以下代码:
// @flow
function add(a: number, b: number): number {
return a + b;
}
console.log(add(1, 2));
console.log(add(1, "2"));
在上面的代码中,我们添加了 @flow
注释告诉 Flow 进行类型检查,声明了 add
函数的参数和返回值类型。在 console.log
语句中使用不符合类型要求的参数时,会在控制台输出类型错误提示。
- 启动 Flow 服务:
npm run flow
启动后,Flow 会对项目中的 JavaScript 文件进行类型检查,并输出类型错误提示。如果遇到问题,可以根据提示信息修复代码,然后重新运行 Flow 服务来进行验证。
- 执行程序:
node src/index.js
上述例子仅为了演示如何使用 Flow,在实际项目中,我们应该尽可能完善注释、引用 Flow 的类型库以及在代码中遵循 Flow 的规范来提高项目的类型检查覆盖率。
标签:检查,16,flow,JavaScript,Flow,TS,add,2023.04,类型 From: https://www.cnblogs.com/yehuda/p/17323372.html