资讯专栏INFORMATION COLUMN

TypeScript最佳实践:是否使用strictnullcheck

张汉庆 / 1348人阅读

摘要:因为标志在时添加的,所以它的使用还没有那么广泛。截至年月,项目和项目中使用了该标志,而或都没有使用该标志。如果执行条件检查可以推断某些内容是非空的。然而,对于三元运算符来说,不幸的是情况并非如此。

原文2017年7月发布并于2017年9月更新

strictnullcheck(严格的null检查)

我应该使用strictnullcheck TypeScript编译器标志吗?

空指针是最常见的bug之一,而通过strictnullcheck TypeScript编译器标志可以在很大程度上避免空指针。因为strictnullcheck标志在TypeScript 2时添加的,所以它的使用还没有那么广泛。截至2017年9月,Angular项目和typeORM项目中使用了该标志,而VSCode、RxJS、ionor或Babylon.js都没有使用该标志。此外,新建一个TypeScript项目时strictnullcheck并不默认开启,以保证向后兼容,并保持TypeScript是JavaScript的超集。

如果你准备编写一个新TypeScript项目,或者有时间将strictnullcheck标志引入到现有的项目中,我建议你这样做。你的应用会因此具备更高的安全性,使用严格的null检查也不会打乱代码,因应用程序本应包含这些检查。缺点是新开发人员还需要学习一个概念。对我来说,利大于弊,所以我建议打开严格的空检查。

严格的空检查的一个例子是:

tsconfig.json

{
  "compilerOptions": {
    "module": "commonjs",
    "target": "es5",
    "noImplicitAny": true,
    "strictNullChecks": true,
    "outDir": "./dist"
  },
  "include": [
    "src/**/*"
  ]
}

src/user.ts

interface User {
  name: string;
  age?: number;
}
function printUserInfo(user: User) {
  console.log(`${user.name}, ${user.age.toString()}`)
  // => error TS2532: Object is possibly "undefined".
  console.log(`${user.name}, ${user.age!.toString()}`)
  // => OK, you confirm that you"re sure user.age is non-null.
  // => 好的,你已经确认user.age是非空的。

  if (user.age != null) {
    console.log(`${user.name}, ${user.age.toString()}`)
  }
  // => OK, the if-condition checked that user.age is non-null.
    // => 好的,if条件检查了user.age是非空的。

  console.log(user.name + ", " + user.age != null ? user.age.toString() : "age unknown");
  // => Unfortunately TypeScript can"t infer that age is non-null here.
  // => 不幸的是TypeScript不能在这里推断年龄是非空的。(译注:截止至2019年7月16日,TS依旧会报此错)
}

如上所述:

感叹号表示你确信(例如,通过在代码中的某个地方执行检查)可能为空的变量实际上是非空的。

如果执行If条件检查, TypeScript可以推断某些内容是非空的。

然而,对于三元运算符来说,不幸的是情况并非如此。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/110288.html

相关文章

  • TypeScript 3.0 + React + Redux 最佳实践

    摘要:首先声明这篇文章是想说明一下最新版本的的新特性带来的极大的开发体验提升而不是如何利用开发应用这个特性就是对的支持在的中有说明具体可以参考这里在版本之前我们在开发应用尤其是在配合一类库的时候经常用到诸如之类的封装而这些函数其实都可以用装饰器的 首先声明, 这篇文章是想说明一下最新版本的 TypeScript(3.0) 的新特性带来的极大的 React 开发体验提升. 而不是如何利用 Ty...

    CloudwiseAPM 评论0 收藏0
  • 新上课程推荐:TypeScript完全解读(总26课时)

    摘要:本套课程包含两大部分,第一部分是基础部分,也是重要部分,参考官方文档结构,针对内容之间的关联性和前后顺序进行合理调整。 showImg(https://segmentfault.com/img/bVbpBA0?w=1460&h=400); 讲师简介: iview 核心开发者,iview-admin 作者,百万级虚拟渲染表格组件 vue-bigdata-table 作者。目前就职于知名互...

    caozhijian 评论0 收藏0
  • TypeScript入门-基本类型

    摘要:基本类型在中,提供了一下基本数据类型布尔类型数据类型字符串类型数组类型元组类型枚举类型任意值类型和类型类型其中元组枚举任意值类型和类型是有别与的特有类型。布尔类型布尔类型是最简单的数据类型,只有和两种值。 学习Angular 2 , 《揭秘Angular 2》读书笔记。Angular2 选择 TypeScript 作为其官方最主要的构建语音,这意味着掌握 TypeScript 语音将更...

    _ipo 评论0 收藏0
  • 翻译 | 开始使用 TypeScript 和 React

    摘要:原文地址原文作者译者校对者和其他人有一些关于比较好的博文,跟随这些博文,我最近开始使用。今天,我将展示如何从零开始建立一个工程,以及如何使用管理构建过程。我也将陈述关于的第一印象,尤其是使用和。 原文地址:Getting started with TypeScript and React 原文作者:Jack_Franklin 译者:luxj 校对者:veizz Tom Dale...

    superw 评论0 收藏0
  • JavaScript => TypeScript 入门

    摘要:为了由简入繁,不妨将这些类型划分为基本类型复合类型。以下将渐进式的对的这些类型进行了解。实际上,有一种属性描述对象,是通过获取的。但无论如何,类型检查是可以排除大部分错误的。在函数的类型声明中,继续来巩固这条规则的写法。 几个月前把 ES6 的特性都过了一遍,收获颇丰。现在继续来看看 TypesScript(下文简称为 TS)。限于经验,本文一些总结如有不当,欢迎指正。 概述 官网有这...

    Tonny 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<