TypeScript基础类型介绍

目录
  • 1.基础类型
  • 2.对象类型
    • 2.1数组
    • 2.2元组
    • 2.3对象
  • 3.类型推断
    • 3.1类型联合中的类型推断
    • 3.2上下文类型
  • 4.类型断言

TS 的静态类型可以人为的分为两类:

基础类型:像布尔值(boolean)、数字(number)、字符串(string)、Any(任意类型)、Void(无类型)、NullUndefinedNever(无值类型)

对象类型:像数组、函数、对象、枚举、元组。

1.基础类型

TS的类型定义主要通过以下示例代码中演示的方式进行定义:

;(function () {
  /*
   * 在 TS 中可以通过 let 变量名: 数据类型 = 变量值值得方式定义数据类型(类型注解)
   * 也可以在定义的时候不指定数据类型,TS 自身会推断该数据类型
   */
  // 布尔型
  let boo: boolean = false // 赋值非布尔值将会抛出异常

  // 数字类型
  let num: number = 100

  // 字符串
  let str: string = '字符串' // 使用单引号或者双引号定位
  str = `模板字符串` // 使用模板字符串定义

  // Any 类型 -> 表示该类型可以为动态的类型,该类型在编译的时候移除了类型检查
  let AnyType: any = 123
  AnyType = true // 重复赋值不会抛出异常

  // Void 类型 -> 通常用于没有返回值的函数类型
  function demo(): void {
    console.log('测试void类型')
  }
  demo()

  // 还有两个比较特殊的类型,就是 null 和 undefined
  // 这两个类型是所有类型的子类型,也就是说可以将这两个两个类型赋值给 number、string 等类型
  let u: undefined = undefined
  num = u // 将 number 类型的变量赋值为 undefined
  let n: null = null
  boo = n // 将 boolean 类型的变量赋值为 null
})()

基础类型比较简单,特别类似于JavaScript,简单看来就是比JavaScript多了一个类型定义

TS 中还有一个Never类型。该类型表示的是那些永远不会存在的值得类型。

例如:never类型是那些总是会抛出异常或根本就不会有返回值的函数表达式或箭头函数表达式的返回值类型。

2.对象类型

2.1数组

TS中的数组不同于JS中的数组,在TS中使用数组不仅可以将一个变量定义为数组,也可以定位数组中的类型。

示例代码如下所示:

;(function () {
  // 定义一个仅仅为数字的数组类型
  let arr1: number[] = [1, 2, 3]
  console.log(arr1)
  // 定义一个可以为 数字 字符串 布尔值的数组
  let arr2: (number | string | boolean)[] = ['1', '2', true]
  console.log(arr2)
  // 定义一个任意类型的数组
  let arr3 = [1, ['1', '2', true], true]
  console.log(arr3)

  // 定义个对象类型的数组,对象中必须有 name 和 age 两个属性
  const objectArray: { name: string; age: number }[] = [
    { name: '一碗周', age: 18 },
  ]
  // 或者通过 type alias 类型别名的方式声明
  // 通过 type 定义一个类型别名
  type User = { name: string; age: number }
  const objectArr: User[] = [{ name: '一碗周', age: 18 }]
})()

2.2元组

元组类型允许表示一个已知元素数量和类型的数组,各元素的类型不必相同。

示例代码如下所示:

;(function () {
  // 定义一个值分别被 string 和 number 的元组
  let tuple: [string, number] = ['123', 123]
  console.log(tuple) // [ '123', 123 ]
  // 通过索引赋值
  tuple[0] = 'string'
  console.log(tuple) // [ 'string', 123 ]
  // 赋值其他类型
  // tuple[0] = true
  // console.log(tuple) // 抛出异常
})()

元组的主要作用就是约束数组中的每一项,及其数组的长度。

元组和数组是可以可以嵌套的,语法结构如下所示:

// 元组和数组的嵌套
let tuples: [string, number][] = [
    ['123', 123],
    ['456', 456],
]

上面的代码中,[string, number]表示一个元组,在后面增加[],就表示这个一个存放元组的数组。

2.3对象

一个对象中可以包含以上所有的类型,示例代码如下所示:

;(function () {
  // 定义一个对象,里面包含 MyName 和 age 两个属性,其中 MyName 为 string 类型 age 为number 类型
  let obj: {
    MyName: string
    age: number
  }
  // 对象的赋值,如果不按上面指定的类型进行赋值会抛出异常
  obj = {
    MyName: '一碗周',
    age: 18,
  }
  console.log(obj) // { MyName: '一碗周', age: 18 }
})()

在TS中我们并不需要在每个地方标注类型,因为类型推断 可以帮助我们在不编写额外代码的,即可获得其功能。但是你想让你的代码可读性更好一些,可以写上每个的类型。

3.类型推断

在TypeScript中有的时候并需要明确指定类型,编译器会自动推断出合适的类型,比如下面这段代码:

;(function () {
  let myName = '一碗周'
  myName = true // 错误:不能将类型“boolean”分配给类型“string”
})()

我们定义myName变量时,并没有指定其数据类型,只是为他赋了一个字符串的值,但是我们如果将这个值重新赋值为要给非string类型的值时,编译器将会抛出异常。

这就是TypeScript中最简单的类型推断,根据右侧的值来推测变量的数据类型。

3.1类型联合中的类型推断

什么是类型联合请参考:联合类型、交叉类型和类型保护

若一个变量可能具有多个类型的值时,TypeScript 会将多个类型合并起来,组成一个联合类型,

示例代码如下:

let arr = [1, '2'] // 定义一个包含字符串和数字的一个数组
// 为上面定义的数组重新赋值
// arr = [true, false] // 错误 不能将类型“boolean”分配给类型“string | number”

// 还有如下例子
let val = arr.length === 0 ? 0 : '数组长度不是0'
// val = false //  错误 不能将类型“boolean”分配给类型“string | number”

3.2上下文类型

在这之前介绍的例子可能都是按照=右边的值来推断=左边的类型。现在要介绍的上下文类型就与之前的类型推断不同,编译器会根据当期变量所处的上下文环境来推断出变量的类型。

示例代码如下:

;(function () {
  // 定义一个接口
  interface Person {
    name: string
    age: number
  }
  // 通过上面定义的接口定义一个数组
  let arr: Person[] = [{ name: '一碗周', age: 18 }]
  // 遍历定义的数组
  arr.forEach(item => {
    // 根据当前所处的环境,编译器自动推断出 item 为 hobby 类型且不具有 hobby 属性
    console.log(item.hobby) // 类型“Person”上不存在属性“hobby”
  })
})()

在上面的代码中,我们首先定义了一个Person的接口,然后用这个接口定义一个数组,遍历该数组时编译器推断itemPerson类型,所以编译器抛出异常。

如果我们为函数表达式的参数添加类型注解,上下文类型将会被忽略到,也就不会在报错了。

示例代码如下:

// 如果在上下文中明确类型信息,上下文将会被忽略。
arr.forEach((item: any) => {
    // 根据当前所处的环境,编译器自动推断出 item 为 hobby 类型且不具有 hobby 属性
    console.log(item.hobby) // 类型“Person”上不存在属性“hobby”
})

4.类型断言

所谓的类型断言就是你来告诉TS这个值得数据类型就是某样的,你不需要做检查。

这样做得话他在运行是不会影响,只有在编译的时候回影响。

示例代码如下:

let SomeValue: any = 'this is a string'
// 语法一
let StrLength1: number = (<string>SomeValue).length
// 语法二 as 语法
let StrLength2: number = (SomeValue as string).length

值得注意的是:在TS中使用JSX时,只有第二种语法是被支持的。

到此这篇关于TypeScript基础类型介绍的文章就介绍到这了,更多相关TypeScript基础类型内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • TypeScript入门-基本数据类型

    大致介绍 TypeScript是由C#语言之父Anders Hejlsberg主导开发的一门编程语言,TypeScript本质上是向JavaScript语言添加了可选的静态类型和基于类的面向对象编程,它相当于是JavaScript的超集 ES5.ES6和TypeScript的关系: 安装 首先需要安装npm,然后在输入 npm install -g typescript 安装完成后,因为TypeScript是以.ts结尾的,要想运行就得把他编译js文件,编译的方法特别简单就是使用tsc命令 ts

  • 一文了解TypeScript数据类型

    目录 基础类型 any类型 数组 元组 Interface 函数 类型自推 联合类型(二选一甚至多选一) class 枚举 基础类型 ts中支持更多的类型 let age: number = 10 // Number let firstName: string = '凉宸' // String let lastName: string = '凉宸' // String let isMary: boolean = true // boolean let unde: undefined = unde

  • 详解 TypeScript 枚举类型

    目录 1. 数字枚举 2. 字符串枚举 3. 反向映射 4. 异构枚举 5. 常量枚举 6. 枚举成员类型和联合枚举类型 (1)枚举成员类型 (2)联合枚举类型 7. 枚举合并 前言: TypeScript 在 ES 原有类型基础上加入枚举类型,使得在 TypeScript 中也可以给一组数值赋予名字,这样对开发者比较友好,可以理解枚举就是一个字典. 枚举类型使用enum来定义: enum Day { SUNDAY, MONDAY, TUESDAY, WEDNESDAY, THURSDAY, F

  • 一文了解什么是TypeScript?

    目录 1.JavaScript的问题 2.TypeScript的优势 3.TypeScript的缺点 4.TypeScript的运行环境 5.作用域问题 前言: TypeScript是JavaScript的超集,它可以编译成纯JavaScript代码. 那为什么会出现TypeScript这门语言,主要是因为现在的JavaScript可以开发很多复杂的项目,但是JavaScript又缺乏其可靠性,在使用的时候需要我们为了代码的健壮性需要添加很多业务逻辑去判断. TypeScript可以运行在浏览器

  • TypeScript Type Innference(类型判断)

    TypeScript 是微软开发的 JavaScript 的超集,TypeScript兼容JavaScript,可以载入JavaScript代码然后运行.TypeScript与JavaScript相比进步的地方 包括:加入注释,让编译器理解所支持的对象和函数,编译器会移除注释,不会增加开销:增加一个完整的类结构,使之更新是传统的面向对象语言. 为什么会有 TypeScript? JavaScript 只是一个脚本语言,并非设计用于开发大型 Web 应用,JavaScript 没有提供类和模块的概

  • TypeScript基础类型介绍

    目录 1.基础类型 2.对象类型 2.1数组 2.2元组 2.3对象 3.类型推断 3.1类型联合中的类型推断 3.2上下文类型 4.类型断言 TS 的静态类型可以人为的分为两类: 基础类型:像布尔值(boolean).数字(number).字符串(string).Any(任意类型).Void(无类型).Null. Undefined.Never(无值类型) 对象类型:像数组.函数.对象.枚举.元组. 1.基础类型 TS的类型定义主要通过以下示例代码中演示的方式进行定义: ;(function

  • TypeScript基本类型之typeof和keyof详解

    目录 编译并运行 TS 代码 TypeScript基础 数组类型   [] 联合类型  | 类型别名 函数类型 void类型 可选参数 ? 参数默认值= 对象类型 :object interface 元组类型 类型推论 类型断言  as 或者 <>泛型 typeof keyof any和unknow的区别 函数重载 总结 安装编译ts的工具 安装命令:npm i -g typescript 或者 yarn global add typescript. 验证是否安装成功:tsc –v(查看 Ty

  • 你不知道的 TypeScript 高级类型(小结)

    前言 对于有 JavaScript 基础的同学来说,入门 TypeScript 其实很容易,只需要简单掌握其基础的类型系统就可以逐步将 JS 应用过渡到 TS 应用. // js const double = (num) => 2 * num // ts const double = (num: number): number => 2 * num 然而,当应用越来越复杂,我们很容易把一些变量设置为 any 类型,TypeScript 写着写着也就成了 AnyScript.为了让大家能更加深入

  • TypeScript枚举类型

    目录 1.概述 2.数字枚举 2.1反向映射 3.字符串枚举 4.const枚举 5.总结 1.概述 所谓的枚举类型就是为一组数值赋予名字. enum类型在C++.Java语言中比较常见,TypeScript在JavaScript原有的类型基础上也增加了enum类型. 比如我们需要定义一组角色,需要使用数字表示,就可以使用如下代码定位: enum role{ STUDENT, TEACHER, ADMIN } 上面代码中我们定义了role为一个枚举类型,这个里面有是三个值,TypeScript会

  • TypeScript常见类型及应用示例讲解

    目录 常见类型(Everyday Types) 原始类型: 数组(Array) any noImplicitAny 变量上的类型注解(Type Annotations on Variables) 函数(Function) 参数类型注解(Parameter Type Annotations) 返回值类型注解(Return Type Annotations) 匿名函数(Anonymous Functions) 对象类型(Object Types) 可选属性(Optional Properties)

  • 你需要知道的TypeScript高级类型总结

    目录 1. 字面量类型 (1)字符串字面量类型 (2)数字字面量类型 (3)布尔字面量类型 (4)模板字面量类型 2. 联合类型 (1)基本使用 (2)限制 (3)可辨识联合类型 3. 交叉类型 (1)基本实用 (2)使用场景 4. 索引类型 (1)索引类型查询操作符 (2)索引访问操作符 (3)应用 5. 条件类型 (1)基本概念 (2)创建自定义条件类型 (3)条件类型的类型推断 6. 类型推断 (1)基础类型 (2)多类型联合 (3)上下文类型 7. 类型保护 (1)instanceof

  • JavaScript Typescript基础使用教程

    目录 简介 安装 安装命令 使用原因 TypeScript类型概述 JS原有的类型 TS新增的类型 类型别名 泛型 简介 typescript是微软公司开发的开源编程语言,Type+Javascript(type是类型,在js的基础上添加了类型支持) 简称:ts,是Javascript的超集 安装 node.js或者我们的浏览器,他只认识js代码,不认识ts代码,所以我们需要把我们的ts转换为我们的js代码,然后进行运行操作 安装命令 npm i -g typescript yarn globa

  • typescript中高级类型Record详解

    ts文档上对Record的介绍不多,但却经常用到,Record是一个很好用的工具类型.他会将一个类型的所有属性值都映射到另一个类型上并创造一个新的类型,先看下Record的源码. /** * Construct a type with a set of properties K of type T */ type Record<K extends keyof any, T> = { [P in K]: T; }; 好像源码也比较简单,即将K中的每个属性([P in K]),都转为T类型.常用的

  • linux文件搜索及其它基础命令介绍(3)

    1.linux中包含大量的文件,对于文件查找,linux提供了find命令. find是一个非常有效的工具,它可以遍历目标目录甚至整个文件系统来查找某些文件或目录: find [path...] [expression] 其中expression包括三种:options.tests和actions.多个表达式之间被操作符分隔,当操作符被省略时,表示使用了默认操作符-and. 当表达式中不包含任何actions时,默认使用-print,也就是打印出搜索到的所有文件,用换行分隔. 其实可以将三种表达

随机推荐