TypeScript知识点梳理

一、原始数据类型

js原始数据类型包括:布尔值、数值、字符串、nullundefined 以及 ES6 中的新类型 Symbol和 BigInt。

ts中的原始数据类型包括:boolean、number、string、void、null、undefined

void表示没有任何返回值的函数。

null和undefined是所有类型的子类型,也就是说null和undefined能赋值给任一类型,如:let a: string = undefined

二、任意值Any和类型推导

any类型是可以赋值为任意类型,任意值可以访问任意属性和方法。

如果变量在声明时未指定类型和赋值,那么会默认为任意值类型,如果变量在声明时未指定类型但有赋值,则会进行类型推导。

三、联合类型

联合类型使用 | 分隔每个类型。如: let a: string | number

当不确定是哪个类型时,只能访问所有类型共有的属性和方法。

联合类型在赋值时,会根据类型推论的规则推断出一个类型。

四、接口

赋值时,变量的形状必须跟接口的形状保持一致,不能多也不能少属性,同时属性的类型一致。

可选属性可在定义的属性名后面加"?",可选属性可以不定义。

任意属性可以用[propName: string]来定义,一旦定义任意属性,确定属性和可选属性必须是其的类型子集。

只读属性可以用readonly定义,例: 

interface A {

  readonly b: string

}

只读属性不能单独赋值。

五、数组

声明数组的三种方法:

1、类型 + 方括号

let arr: number[] = [1,2]

2、数组泛型

let arr: Array<number> = [1,2]

3、接口

interface NumberArray {

  [index: number]: number

}

let arr:NumberArray = [1,2]

any类型数组元素可以是任意类型

六、函数的类型

在 JavaScript 中,有两种常见的定义函数的方式:函数声明和函数表达式

//函数声明

function fn() {}

//函数表达式

let fn = function() {}

在ts中要对函数的输出和输入进行约束,如:

function sum(a: number, b:number): number {

  return a + b

}

let sum:(a: number, b: number) => number = function(a: number, b:number):number {

  return a + b 

}

使用接口定义形状:

interface SumFunc {

  (a:number, b:number): number

}

let sum: SumFunc

sum = function(a: number, b:number) {

  return a + b

}

用"?"表示可选参数,可选参数后面不能出现必选参数

七、类型断言

使用: 值  as 型 或者 <类型>值

在 tsx 语法(React 的 jsx 语法的 ts 版)中必须使用前者,即 值 as 类型

  • 联合类型可以被断言为其中一个类型
  • 父类可以被断言为子类
  • 任何类型都可以被断言为 any
  • any 可以被断言为任何类型

若 A 兼容 B,那么 A 能够被断言为 BB 也能被断言为 A

八、声明文件

通常我们会把声明语句放到一个单独的文件(x.d.ts)中,这就是声明文件,声明文件必需以 .d.ts 为后缀。

declare var 声明全局变量

declare function 声明全局方法

declare clasee 声明全局类

declare enum 声明全局枚举类型

declare namespace 声明(含有子属性的)全局对象

declare global 扩展全局变量

declare module 扩展模块

九、type声明

用于类型别名和字符串字面量类型

十、定义元组

let t:[string, number]

十一、枚举

使用enum来定义:

enum Num {One, Two,Three}

枚举成员会被赋值为从 0 开始递增的数字,后面递增1,同时也会对枚举值到枚举名进行反向映射。

枚举项可以手动赋值,未手动赋值的枚举项会接着上一个枚举项递增。

十二、类

  • public 修饰的属性或方法是公有的,可以在任何地方被访问到,默认所有的属性和方法都是 public 的
  • private 修饰的属性或方法是私有的,不能在声明它的类的外部访问
  • protected 修饰的属性或方法是受保护的,它和 private 类似,区别是它在子类中也是允许被访问的

abstract 用于定义抽象类和其中的抽象方法。抽象类是不允许被实例化的,抽象类中的抽象方法必须被子类实现

十三、泛型

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

可以使用了 extends 约束了泛型 T 必须符合接口的形状进行泛型线束,如:

interface A {

  a: string

}

function fn<T extends A>(n: T): T() {}

像以上只能传入拥有a属性的类型

十四、声明合并

如果定义了两个相同名字的函数、接口或类,那么它们会合并成一个类型。

合并的属性类型必须是唯一的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值