TypeScript 基础类型浅析
发布时间:2023-03-30 08:47:32 所属栏目:教程 来源:
导读:自本节起,我们将开始接触 TypeScript 的类型系统,这也是 TypeScript 最为核心的部分。
本节介绍 TypeScript 中一些基础类型,有些特殊类型会在接下来进行单节描述。在进行变量声明时,需要注明其对应的类型,这
本节介绍 TypeScript 中一些基础类型,有些特殊类型会在接下来进行单节描述。在进行变量声明时,需要注明其对应的类型,这
自本节起,我们将开始接触 TypeScript 的类型系统,这也是 TypeScript 最为核心的部分。 本节介绍 TypeScript 中一些基础类型,有些特殊类型会在接下来进行单节描述。在进行变量声明时,需要注明其对应的类型,这个跟 JavaScript 的变量声明不同。在写 TypeScript 代码时,所有的变量都需要有类型,这个观点要深刻的烙印在心里。 TypeScript 中的类型有: 原始类型 boolean number string void null undefined bigint symbol 元组 tuple 枚举 enum 任意 any unkNown never 数组 Array 对象 object 最简单的数据类型就是 true / false 值: const registered: boolean = false const done: boolean = Boolean() 变量声明语法:冒号 : 前面是变量名称,后面是变量类型。 二进制数、十进制数、十六进制数都可以用 number 类型来表示。 let decLiteral: number = let goldenSection: number = let hexLiteral: number = let binaryLiteral: number = let octalLiteral: number = let notANumber: number = 双引号或者单引号表示字符串: let protagonist: string = "Sherlock Holmes" let partner: string = 'Dr. John Hamish Watson' 使用模板字符串: let protagonist: string = 'Sherlock' let sentence: string = `华生是${protagonist}的朋友、助手和室友。` 模板字符串使用反引号来代替普通字符串中的用双引号和单引号。模板字符串可以包含特定语法 ${expression} 的占位符,占位符内可以写变量名,模板字符串会进行变量值的解析。 当一个函数没有返回值时,可以将其返回值类型定义为 void: function donothing(): void { let a = } 声明一个 void 类型的变量没有什么用,因为你只能将它赋值为 undefined 和 null: let nothing: void = undefined undefined 和 null 是所有类型的子类型。 一般项目是默认开启 --strictnullchecks 检测的(这句话不明白是什么意思),如果你将 tsconfig.json 中 strictnullchecks 选项设置为 false,下面这种操作不会报错,不过尽量不要这么做: let num: number = undefined let list: number[] = undefined let name: string = undefined 数组类型有两种表示方法,第一种在元素类型后接上 [],表示由此类型元素组成的一个数组: let list: number[] = [, , ] let names: string[] = ['Sherlock', 'Watson', 'Mrs. Hudson'] 另一种方式是使用数组泛型(泛型后续会单独介绍),Array<元素类型>: let list: Array<number> = [, , ] let names: Array<string> = ['Sherlock', 'Watson', 'Mrs. Hudson'] 混合各种元素类型: let list: any[] = ['Sherlock', ] 推荐使用第一种数组类型的表示方法,书写比较简洁直观。 有时候接收来自用户的输入,我们是不能确定其变量类型的。这种情况下,我们不希望类型检查器对这些值进行检查,而是直接让它们通过编译阶段的检查,此时可以使用 any: let input: any = 'nothing' input = // ok input = true // ok input = [] // ok input = null // ok input = Symbol('any') // ok 如果一个数据是 any 类型,那么可以访问它的任意属性,即使这个属性不存在: let anything: any = anything.eat() // ok anything.name // ok anything[] // ok new anything() // ok anything() // ok 从上面的例子中可以看到,any 类型几乎可以做任何操作,这样很容易编写类型正确但是执行异常的代码。我们使用 TypeScript 就是为了代码的健壮性,所以要尽量减少 any 的使用。 object 表示非原始类型(non-primitive type): let obj: object // 枚举类型 enum TokenType { ACCESS = 'accesstoken', REFRESH = 'refreshToken' } obj = TokenType obj = [, , ] obj = [, 'string'] // 元组类型 obj = { a: } 可以看到枚举、数组、元组和普通对象都是 object 类型。 TypeScript 中描述类型要用 小写,比如 boolean、number、string等; 大写开头的如 Boolean、Number、String 代表的是 JavaScript 的构造函数: let a: Number = new Number('10') // a === 10 为 false let b: number = Number('10') // b === 10 为 true a instanceof Number // true b instanceof Number // false 代码解释: 第 1 行,通过 new Number('10') 得到的是一个构造函数,本质是一个对象。 第 2 行,Number('10') 与 10 都是声明一个数字 10 的方法,本质就是一个数字。 第 4 - 5 行,instanceof 运算符用于检测构造函数的 prototype 属性是否出现在某个实例对象的原型链上。a 是一个对象,它的 __proto__ 属性指向该对象的构造函数的原型对象 Number,所以为 true。b 是一个数字,所以为 false。 __proto__ 是非标准属性,你也可以使用 Object.getPrototypeOf() 方法来访问一个对象的原型: a.__proto__ === Object.getPrototypeOf(a) // true 本小节介绍了 TypeScript 一些基本类型,需要记住的是: TypeScript 中描述类型要用 小写。 不要滥用 any ! (编辑:汽车网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |