TypeScript strict 有哪些选项

你写代码时有没有过这种情况:明明逻辑看着没问题,运行时却突然蹦出个“找不到变量”“类型不匹配”的报错?或者上线后才发现,某个变量居然存了不该存的字符串,把整个功能搞崩了?这其实是JavaScript的“宽松”特性埋下的坑——它不会主动检查你的代码有没有潜在隐患。而TypeScript的strict选项,就是专门用来把这些坑一个个填上的“安全锁”。

什么是strict选项?

简单说,strict是TypeScript里的一组“强制检查规则”的集合。你不用自己一个个调规则,只要在tsconfig.json里把strict设为true,就能一次性开启所有能帮你找错的检查。它不是要限制你写代码,而是帮你在写代码时就揪出那些“看起来对、实际错”的问题,减少后期调试的麻烦。

TypeScript strict 有哪些选项

核心的几个实用选项

strict选项里包含了好几个子规则,其中这几个最常用,也是最容易帮你避坑的:

noImplicitAny:拒绝“隐形的任意类型”

你有没有写过这样的代码?function add(a, b) { return a + b; } 没给a和b加类型,TypeScript就会默认它们是“any”类型——也就是啥类型都行。这就像你请朋友帮你带东西,没说清楚带啥,朋友可能随便拿个小玩意儿糊弄你,最后你要的文件变成了玩具。

开启noImplicitAny后,TypeScript会直接报错,逼你给a和b加上明确类型,比如function add(a: number, b: number) { return a + b; },从根源避免类型混乱。

strictNullChecks:不让“空值”偷偷搞破坏

假设你写了个获取用户昵称的函数:function getUsername() { return null; },你以为这个函数只会返回字符串,结果用的时候直接const name = getUsername(); console.log(name.length);——这时候就会报错,因为name可能是null,根本没有length属性。

开启strictNullChecks后,TypeScript会强制你在可能为空的地方做判断。比如你得写成const name = getUsername(); if (name) { console.log(name.length); },或者明确告诉它“这里确实可能是空值”,避免了运行时的“Cannot read property of null”这类经典报错。

noImplicitThis:不让“this”乱绑定

在JavaScript里,this的指向经常让人头疼。比如你有个对象的方法,把它单独拿出来用:const log = user.log; log();,这时候this就会指向全局对象,而不是user对象,可能会读取到不存在的属性。

开启noImplicitThis后,TypeScript会检查这种情况,提示你“这里的this可能不是你想要的”,帮你提前发现这类隐蔽的this指向问题。

为什么要开strict?

有些新手会觉得“开strict太麻烦,写代码要加好多类型”,但其实这就像装家里的烟雾报警器——平时不用它响,真着火了就能救你一命。比如你做电商网站,用户地址字段如果被误存成数字,就没法配送;开了strict,这种错误在写代码时就会被拦住,不会上线后影响真实用户。

当然,strict不是万能的,但它是TypeScript里最基础的“安全防线”。对初学者来说,从开启strict开始,能少踩80%的常见坑;对团队项目来说,统一开启strict也能保证代码风格一致,减少因为理解不同导致的bug。

最后提醒一句,如果你刚接触TypeScript,别一开始就硬扛所有规则,可以先开严格模式,遇到难改的规则再慢慢调整,毕竟它是工具,不是枷锁,帮你写更稳的代码才是关键。

上一篇 零基础入门Swift:从语法基础到实用开发的知识科普指南