null undefined 都有各自的类型名称。这些类型本身没有用处,因为我们只能将 null undefined 赋值给定义为 null undefined 类型的变量。

let u: undefined = undefined
u = 'string' // compile error
let n: null = null
n = 43 //compile error

默认情况下, null undefined 是所有类型的子类型。 就是说可以把 null undefined 赋值给 number 类型的变量。

let value: string | undefined | null = null
value = 'hello'
value = undefined

注意: 默认情况下,将禁用 null undefined 处理,我们可以通过在 tsconfig.json 文件将 strictNullChecks 设置为 true 来启用。当启用 strictNullChecks 时,本文的示例才能正常运行。

可选链接是一种 JavaScript 功能,它与 TypeScript 的空处理配合得很好。它允许使用紧凑的语法访问对象上的属性,这些属性可能存在,也可能不存在。它可以和 ?. (可选链) 运算符访在问属性时一起使用。

interface User {
  name: string
  address?: {
    street: string
function printStreet(user: User) {
  const streetInfo = user.address?.street
  if (streetInfo === undefined) {
    console.log('No street info')
  } else {
    console.log(streetInfo)
let user: User = {
  name: 'O.O'
printStreet(user) // 'No street info'

空值合并是另一个 JavaScript 特性,它也可以很好地与 TypeScript 的空处理配合使用。

它允许编写在处理 null undefined 时有回退的表达式。当表达式中可能出现其他 falsy 值,但这些值仍然有效时,这非常有用。

它可以与表达式中的 ?? (空值合并运算符) 一起使用,类似于使用 && (与运算符)

function printName(name: string | null | undefined) {
  console.log(`${name ?? '无名氏'}`)
printName(null) // '无名氏'
printName('O.O') // 'O.O'

TypeScript 的推理系统并不完美,有时候忽略一个值为 null undefined 的可能性是有意义的。一个简单的方法就是使用类型转换,但是 TypeScript 也提供了 ! 运算符作为方便的快捷方式。

function getValue(): string | undefined {
  return 'hello'
let value = getValue()
value.length // value 可能为 undefined
// 使用 ! 运算符
value!.length // 5

就像类型转化一样,这可能是不安全的,应该小心使用。

数组边界处理

即使启用了 strictNullChecks ,默认情况下 TypeScript 也会假定数组访问永远不会返回 undefined (除非 undefined 是数组类型的一部分)。

let array: number[] = [1, 2, 3]
let value = array[0] // value 的类型为 number

我们可以配置 noUncheckedIndexedAccess 来更改此行为。

let array: number[] = [1, 2, 3]
let value = array[0] // value 的类型为 number | undefined
null 和 undefined 都有各自的类型名称。这些类型本身没有用处,因为我们只能将 null 和 undefined 赋值给定义为 null 或 undefined 类型的变量。let u: undefined = undefinedu = 'string' // compile errorlet n: null = nulln = 43 //compile error默认情况...
本文总结一下 TypeScript 类型声明的书写,很多时候写 TypeScript 不是问题,写类型就特别纠结,我总结下,我在使用 TypeScript 中遇到的问题。如果你遇到类型声明不会写的时候,多看看lodash的声明,因为lodash对数据进行各种变形操作,所以你能遇到的,都有参考示例。 // 变量 const num: number = 1; const str: string = 'str'; const bool: boolean = true; const null s: null = null ; const undefine: undefined = undef
TypeScript 本质是 javascript ,因此基本上js所有的功能在ts上完全可以照搬照抄过来使用。根据ts的文档,有些我觉得值得商榷的——比如 null , undefined 就是例子。 文档上说一个变量如果是number,boolean等基本类型,可以为 null 或者是 undefined 。在我看来,既然TS是“强 语言 ”类型,我们. const str:string = 'a'; const boal:boolean = true; // undefined or null 을 사용할때는 단독적으로 사용하지 않는다. // => 단독으로 사용될 경우에는 undefined ( null ) 밖에 담지 못하게 때문에, let age:number|undefi
01Typescript介绍 、Typescript安装、Typescript 开发 工具(15分51秒).rar 02 Typescript 中的数据类型 boolean 数字类型 number类型 string类型 array类型元组类型 (tuple)枚举类型 (enum) (上) (20分29秒).rar 03 Typescript中的数据类型 任意类型 (any) null undefined void类型 never类型 (下) (16分6秒).rar 04 Typescript中的函数 函数的定义 可选参数 默认参数 剩余参数 函数重载 箭头函数 (31分50秒).rar 05 Typescript中的类 Es5中的类和静态方法 继承 (原型链继承、对象冒充继承、原型链+对象冒充组合继承) (20分40秒).rar 06 Typescript中的类 类的定义 继承 类里面的修饰符 (上) (29分4秒).rar 07 Typescript中的类 类中的静态属性 静态方法 抽象类 多态 (下) (27分52秒).rar 08 Typescript中的接口的用途 以及属性类型接口 (19分46秒).rar 09 Typescript中的属性类型接口【案例】 定义Ajax请求数据的接口 ts封装ajax (8分).rar 10 Typescript中的函数类型口 【案例】 加密方法约束 (5分11秒).rar 11 Typescript中的可索引接口 类类型接口 (12分2秒).rar 12 Typescript中接口扩展、接口的继承 (7分19秒).rar 13 Typescript中的泛型 泛型变量 泛型类 (22分54秒).rar 14 Typescript的泛型接口 泛型类接口 (8分42秒).rar 15 Typescript泛型类 - 把类作为参数类型的泛型类 (21分47秒).rar 16 Typescript 类型、接口、类 、泛型 综合使用--Typescript封装统一操作Mysql Mongodb Mssql的底层类库 (14分31秒).rar 17 Typescript 模块 以及模块化封装DB库 封装类似Mongoose风格的类库 (25分22秒).rar 18 命名空间 命名空间块化 (11分35秒).rar 19 装饰器定义 类装饰器 属性装饰器 装饰器工厂 (23分17秒).rar 20 装饰器 方法装饰器 方法参数装饰器 装饰器的执行顺序 (28分39秒
TS学习笔记 文章目录TS学习笔记一. 环境搭建二. 基本类型1. 类型声明2. 基本类型三. 编译选项四. Webpack + TS(一) 基础 配置1. 配置依赖2. webpack.config.js3. tsconfig.json4. 构建指令配置(二)清除旧的打包产物五. class0. 基础 使用1. 构造函数&this2. 继承3. 抽象4. 接口5. 属性封装6. 泛型 一. 环境搭建 安装Node.js npm i -g typescript 创建ts文件test.ts,编译:tsc
const numberArr = [1,2,3]; 这时候你把鼠标放在numberArr上面可以看出,这个数组的类型就是 number 类型。这是 TypeScript 通过类型推断自己推断出来的。 如果你要显示的注解,也非常简单,可以写成下面的形式。 const numberArr: number[] = [1, 2, 3]; 同样道理,如果你的数组各项是字符串,你就可以写成这样。 可 null 类型( Null able Types) TypeScript 具有两种特殊的类型, null undefined ,它们分别具有值 null undefined 。 默认情况下,类型检查器认为 null undefined 可以赋值给任何类型。 null undefined 是所有其它类型的一个有效值。 这也
public static except Null = (params: any): any => { let data: any = {}; for (const item in params) { if (params.hasOwnProperty(item)) { if (StringUtils.isNotEmpty(params[item])) { if (typeof params[item] === 'object') { 1. TypeScript 提供了强类型检查,可以在 开发 过程中发现错误并进行修正,提高代码的质量和可读性。 2. TypeScript 支持面向对象编程,包括类、接口等特性,可以更好的组织代码和实现复杂的业务逻辑。 3. TypeScript JavaScript 兼容,可以在不改变已有代码的情况下使用 TypeScript 。 1. 学习曲线较陡峭,需要对面向对象编程和类型系统有一定的了解。 2. 编译速度比 JavaScript 慢,对于小型项目可能不太明显,但对于大型项目,编译时间可能会变得很长。 总的来说,如果需要 开发 大型项目或对代码质量有较高要求,使用 TypeScript 可以提高代码的可读性和可维护性。如果是小型项目或快速原型 开发 ,可以使用 JavaScript