原始帖子2017年7月和更新2017年9月strictnullcheck(严格空检查)我应该使用strictnullcheckTypeScript编译器标志吗?空指针是最常见的错误之一,而使用strictnullcheckTypeScript编译器标志可以在很大程度上避免空指针。由于在TypeScript2中添加了strictnullcheck标志,因此它的使用还没有那么广泛。截至2017年9月,该标志用于Angular项目和typeORM项目,但不用于VSCode、RxJS、ionor或Babylon.js。此外,在创建新的TypeScript项目时默认不启用strictnullcheck,以确保向后兼容并保持TypeScript是JavaScript的超集。如果您正在编写一个新的TypeScript项目,或者有时间将strictnullcheck标志引入现有项目,我建议您这样做。因此,您的应用程序将更加安全,并且使用严格的空值检查不会破坏代码,因为应用程序应该包括这些检查。缺点是新开发人员还需要学习一个概念。对我来说,利大于弊,所以我建议开启严格的空值检查。严格空值检查的一个例子是:./dist"},"include":["src/**/*"]}src/user.tsinterfaceUser{name:string;age?:number;}functionprintUserInfo(user:User){console.log(`${user.name},${user.age.toString()}`)//=>errorTS2532:Objectispossibly'undefined'.console.log(`${user.name},${user.age!.toString()}`)//=>OK,你确认你确定user.age是非空的。//=>好的,你已经确认user.age是非空的。if(user.age!=null){console.log(`${user.name},${user.age.toString()}`)}//=>OK,if条件检查了user.age是非空的。//=>好的,if条件检查user.age是否为非空。console.log(user.name+','+user.age!=null?user.age.toString():'ageunknown');//=>不幸的是,TypeScript无法推断年龄在这里是非空的。//=>不幸的是,TypeScript无法推断age在这里是非空的。(译注:截止到2019年7月16日,TS依然会报这个错误)}上面说了:感叹号表示你确定(比如在代码某处进行检查)这个可能为空的变量实际上是非空的。空的。如果TypeScript执行If条件检查,它可以推断出某些东西是非空的。然而,不幸的是,三元运算符并非如此。
