Allen Yu Allen Yu
Home
  • 前端文章

    • JavaScript
  • 学习笔记

    • 《TypeScript入门教程》
GitHub (opens new window)
Home
  • 前端文章

    • JavaScript
  • 学习笔记

    • 《TypeScript入门教程》
GitHub (opens new window)
  • 开始

  • 基础

    • 原始数据类型
      • 原始数据类型 (Primitive Data Types)
      • 布尔值
      • 数值
      • 字符串
      • 空值
      • Null 和 Undefined
    • 任意值
    • 类型推论
    • 联合类型
    • interfaces
    • 数组类型
    • 函数类型
    • 类型断言
    • 声明文件
    • 内置对象
    • keyof and typeof
    • extends
  • 进阶

  • 实战

  • TypeScript
  • 基础
2020-10-31
目录

原始数据类型

# 原始数据类型 (Primitive Data Types)

JavaScript 的类型分为两种:原始数据类型(Primitive Data Types)和对象类型(Object Types)。

在《JavaScript 高级程序设计》中也称为:简单数据类型和复杂数据类型。

原始数据类型包括:布尔值、数值、字符串、null、undefined 以及 ES6 中的 Symbol (opens new window)。

本节主要介绍前五种原始数据类型在 TypeScript 中的应用。

# 布尔值

布尔值是最基本的数据类型,在 TypeScript 中和 JavaScript 中都是使用 boolean 定义布尔值类型。

let isGoodStudent: boolean = true

注意,使用构造函数 Boolean 实例化的对象不是布尔值:

let isGoodStudent: boolean = new Boolean(true)

// - error TS2322: Type 'Boolean' is not assignable to type 'boolean'
//  - 错误编号 TS2322: 'Boolean' 类型与 'boolean' 不匹配
// 'boolean' is a primitive, but 'Boolean' is a wrapper object. Prefer using 'boolean' when possible.
// 'boolean' 是一个原始数据类型,但 'Boolean' 是一个包装对象。尽量使用 'boolean'

那如果我确实想定义一个布尔对象呢?只需要修改成以下代码即可

let isGoodStudent: Boolean = new Boolean(true)

移除 new 后, 得到的就是 boolean 类型的值了,这里的 Boolean(true) 和 new Boolean(true) 区别就是:

  • Boolean(true) 调用的是转型函数,强制转换参数为 boolean 类型后返回,和我们常用的 !!true 方法是一样的
  • new Boolean(true) 是创建一个 Boolean 对象类型的实例,这个实例的 typeof 是 object
let isGoodStudent: boolean = Boolean(true)

在 TypeScript 中,boolean 是 JavaScript 的基本类型,而 Boolean 依据使用方式的不同,可以是转型函数,也可以是构造函数。数值、字符串类型和布尔值相同。

# 数值

和 JavaScript 一样,TypeScript 里的所有数字都是浮点数。这些浮点数的类型是 number。除了支持十进制和十六进制字面量,TypeScript 还支持 ES6 中的二进制和八进制字面量 (opens new window)

let decLiteral: number = 17 // 十进制 17
let hexLiteral: number = 0x11 // 十六进制,十进制的 17
let binaryLiteral: number = 0b10001 // 二进制,十进制的 17
let octalLiteral: number = 0o21 // 八进制,十进制的 17

编译结果:

var decLiteral = 17
var hexLiteral = 0x11
var binaryLiteral = 17
var octalLiteral = 17

十六进制,目前的运行时(浏览器和 nodejs)都是支持的,所以不需要转移为十进制

# 字符串

使用 string 定义字符串类型

let myName: string = 'Yu Xiao Lei'
let age: number = 28

// 模板字符串
let introduce: string = `Hello, my name is ${myName}.
I'll be ${age + 1} years old next month.`

编译结果:

var myName = 'Yu Xiao Lei'
var age = 28
// 模板字符串
var introduce =
  'Hello, my name is ' +
  myName +
  ".\nI'll be " +
  (age + 1) +
  ' years old next month.'

变量名不能定义为 name ,TypeScript 编译会报错,报错原因:stackoverflow (opens new window)

# 空值

JavaScript 没有空值概念,在 TypeScript 中,可以用 void 表示没有任何返回值的函数

function myFun(): void {
  console.log('I like cats')
}

声明一个 void 类型的变量只能给它赋值 undefine 和 null

let unusable: void = undefined

# Null 和 Undefined

在 TypeScript 中,可以使用 null 和 undefined 定义这两个原始数据类型

let n: null = null
let u: undefined = undefined

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

let n: number = null
let u: string = undefined

编译结果

var n = null
var u = undefined

然而,当你指定了 --strictNullChecks 标记,null 和 undefined 只能赋值给 void 和它们各自。

如果你想传入一个 string 或 null 或 undefined,你可以使用联合类型 string | null | undefined

TypeScript 官方文档是鼓励尽可能的使用 --strictNullChecks,这样可以避免出现很多常见的问题

Last Updated: 3/30/2022, 1:20:25 AM
简介
任意值

← 简介 任意值→

最近更新
01
4 月第 2 周总结
04-17
02
工具类型
04-01
03
Google 搜索小技巧
03-28
更多文章>
Theme by Vdoing | Copyright © 2018-2022 Allen Yu
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式