TypeScript使用strictnullcheck实战解析

 更新时间:2023年08月01日 14:33:32   作者:RDDcoding  
这篇文章主要为大家介绍了TypeScript使用strictnullcheck实战解析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

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.tsmean.com/articles/learn-typescript/strict-null-checks-best-practice/

以上就是TypeScript使用strictnullcheck实战解析的详细内容,更多关于TypeScript使用strictnullcheck的资料请关注脚本之家其它相关文章!

相关文章

  • PureScript与JavaScript中equality设计的使用对比分析

    PureScript与JavaScript中equality设计的使用对比分析

    这篇文章主要为大家介绍了PureScript中的equality与JavaScript中的equality设计对比分析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-11-11
  • d3-scale d3-scaleTime使用示例详解

    d3-scale d3-scaleTime使用示例详解

    这篇文章主要为大家介绍了d3-scale d3-scaleTime使用示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-03-03
  • TypeScript中的数据类型enum type interface基础用法示例

    TypeScript中的数据类型enum type interface基础用法示例

    这篇文章主要为大家介绍了TypeScript中的数据类型enum type interface基础用法示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-08-08
  • TypeScript Nim交替使用细节分析

    TypeScript Nim交替使用细节分析

    这篇文章主要为大家介绍了TypeScript Nim交替使用细节分析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-08-08
  • jsf实现微信小程序简洁登录页面(附源码)

    jsf实现微信小程序简洁登录页面(附源码)

    这篇文章主要介绍了实现微信小程序简洁登录页面 ,对于正在学习的小伙伴都有一定的参考价值,需要的小伙伴可以参考一下
    2022-01-01
  • TypeScript快速学习入门基础语法

    TypeScript快速学习入门基础语法

    TypeScript的基础语法,包括变量声明、复合类型(数组和对象)、条件控制(if-else和switch)、循环(for和while)、函数(基础和箭头函数,以及可选参数)、面向对象特性(枚举、接口、继承)以及模块开发中的导出和导入
    2024-07-07
  • ThreeJS使用纹理贴图创建一个我的世界草地方块

    ThreeJS使用纹理贴图创建一个我的世界草地方块

    这篇文章主要为大家介绍了ThreeJS使用纹理贴图创建一个我的世界草地方块的实现示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-06-06
  • TypeScript类型编程中的extends和infer示例解析

    TypeScript类型编程中的extends和infer示例解析

    这篇文章主要为大家介绍了TypeScript类型编程中的extends和infer示例解析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-08-08
  • ts 类型体操 Chainable Options 可链式选项示例详解

    ts 类型体操 Chainable Options 可链式选项示例详解

    这篇文章主要为大家介绍了ts 类型体操 Chainable Options 可链式选项示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-09-09
  • 微信小程序实现图片自适应(支持多图)

    微信小程序实现图片自适应(支持多图)

    这篇文章主要介绍了微信小程序如何实现图片自适应的相关资料,文中介绍的方法同样适应于多图,有需要的朋友可以参考借鉴,下面来一起看看吧。
    2017-01-01

最新评论