如何启用TypeScript类型校验?Deno运行类型错误代码未报TS2322
问题现象
跟随教程学习时,教程标注以下TypeScript示例代码运行应当抛出类型错误,但本地执行时可正常运行:
// example.ts let age: number; age = 15; console.log(age); age = "foo"; console.log(age);
执行deno run example.ts命令后的实际输出:
$ deno run example.ts 15 foo
预期行为是抛出TS2322类型错误,本地运行环境版本信息如下:
$ deno --version deno 1.23.1 (release, x86_64-unknown-linux-gnu) v8 10.4.132.8 typescript 4.7.2
问题原因
从Deno 1.23版本开始,deno run默认跳过执行前的TypeScript全量类型检查环节,仅完成语法转译后就直接运行代码,以此优化启动速度。这一默认行为变更,就是存在明确类型错误的TS代码可以正常执行、未抛出TS2322报错的根本原因。
开启TypeScript类型校验的方法
- 单次运行触发校验:执行run命令时追加
--check参数,完整命令为deno run --check example.ts。添加该参数后,Deno会在代码执行前完成完整类型检查,遇到示例中给标注为number类型的变量赋值字符串的问题,会直接抛出TS2322类型错误并终止执行。 - 项目级默认开启校验:在项目根目录新建
deno.json配置文件,添加严格类型检查配置,配置如下:
{ "compilerOptions": { "strict": true } }
配置生效后,当前项目下执行deno run时会默认开启类型检查,无需每次手动追加参数。
- 仅做类型校验不执行代码:直接运行
deno check example.ts命令,该命令仅对代码做全量类型扫描校验,不会执行实际代码逻辑。
内容的提问来源于stack exchange,提问作者cavalcantelucas
相关产品推荐
相关产品推荐

