TypeScript 学习笔记03

116 阅读3分钟

掌握 TS 的高级类型及用法

1-any 类型

定义及作用

any: 任何类型的值都可以赋值给 any , any 也可以赋值给任意类型。

let a:number
let b:string = 'hello'
a = b

它能逃过TypeScript编译器的类型检测,并和TypeScript中其他所有类型都相互兼容, 但是会造成类型污染,而且使用不存在的属性或方法时不报错

any的使用场景

  • 不挑任何类型的函数。 例如,console.log() ; 定义一个函数,输入任意类型的数据,返回该数据类型
  • 临时使用 any 来“避免”书写很长、很复杂的类型

隐式 any

  1. 声明变量不提供类型也不提供默认值
  2. 定义函数时,参数不给类型

原则:能不用 any 就不用

02-类型断言

类型断言的作用和使用用场景

作用: 类型断言可以用来手动指定一个值的类型,即允许变量从一种类型更改为另一种类型

为何使用 : 类型断言用于解决 “不确定一个联合类型的变量到底是哪个类型的时候,我们只能访问此联合类型的所有类型中共有的属性或方法”

场景:有时候你会比 TS 更加明确一个值的类型,此时,可以使用类型断言来指定更具体的类型。

语法格式

关键字: as

<类型>值 或 值 as 类型

解释:

  1. 使用 as 关键字实现类型断言
  2. 关键字 as 后面的类型是一个更加具体的类型(HTMLAnchorElement 是 HTMLElement 的子类型)

示例

var str = '1' 
var str2:number = <number> <any> str  //str、str2 是 string 类型 
console.log(str2)

泛型-基本介绍

泛型,是指在定义函数,接口,类的时候,不预先指定具体的类型,而在使用的时候指定类型的一种特性

本质是参数化类型,通俗的讲,就是所操作的数据类型被指定为一个参数,这种参数类型可以用在类、接口和函数的创建中,分别成为泛型类泛型接口泛型函数

泛型-泛型函数

定义格式

function 函数名<类型变量1,类型变量2,...>(参数1:类型1,参数2:类型2,...): 返回值类型 {
}

在函数名称的后面写 <>尖括号中添加类型变量

示例

function fn<T>(value: T): T { return value } //T可以是任意合法的变量名称 

调用格式

const 返回值  = 泛型函数名<类型1,类型2,...>(实参1,实参2,实参3,......)

语法:在函数名称的后面添加 <>尖括号中指定具体的类型

示例

const num = fn<number>(10)
const str = fn<string>('a')

泛型接口

目标

在接口中使用泛型来使用,以增加其灵活性,增强其复用性

interface MyArray {
  length: number,
  push(n: number):void,
  pop():number,
  reverse():number[]
}

let obj: MyArray = {
  id(value) { return value },
  ids() { return [1, 3, 5] }
}

定义

interface 接口名<类型变量1,类型变量2...> {
  属性名1:类型1,
  属性名2:类型2,
  属性名3:类型3
}
  1. 在接口名称的后面添加 <类型变量>,那么,这个接口就变成了泛型接口。
  2. 接口的类型变量,对接口中所有其他成员可见,也就是接口中所有成员都可以使用类型变量
  3. 使用泛型接口时,需要显式指定具体的类型