TypeScript--笔记四(补充:数组、对象、函数、断言、type)

1. 数组类型

语法两种写法 :

  • 数组名:类型[ ]
  • 数组名:Array<类型>
let arr: number[]
arr = [1, 2, 3, 4]

let newArr: Array<string> = ['a','b','c']

2. 对象

{} 用来指定对象中可以包含哪些属性
语法:{属性名:属性值}
属性名后面加问号 表示属性可选
当对象属性不确定后续有没有新增时:可以使用 [propName:string]:any
意思是 任意类型的属性,属性名字类型为字符串,
propName随便起的名字不固定,只=只是大家习惯性使用语义话点

let a: object;
a = {}
a = function () { }
let b: { name: string, age?: number }
b = { name: '章三' }

// 后续可增加任意类型属性的声明
let c: { name: string, [propName: string]: any }
c = { name: '李四', age: 123, sex: '男' } // 后面可追加任意属性

3. 函数方法

  • 设置函数结构类型声明
  • 语法:(形参:类型,形参:类型) =>返回值
// 声明有返回值 👎返回值类型为number
let d: (a: number, b: number) => number
d = function (n1,n2) {
  return n1 + n2
}

4. void (空)

void 用来表示空 常用于函数返回值的声明,
下面代码表示函数没有返回值

function fn(): void {
}

5. any

一个变量设置了类型为any相当于对该变量关闭了ts的类型监测,他可以赋值给任意变量
所以使用ts时不建议使用呀any类型

let num: any;
num = 1;
num = false;
num = '123';
num = function() {}

上述num声明类型为any 则num可以赋值任何类型

6. unknown

  • unknown 类型实际上就是一个类型安全的any
  • unknown类型变量,不能直接赋值给其他变量
  • 如果要复制 就要进行判断或者进行断言
let e: unknown;
let s: string;
if(typeof e === 'string'){
  s = e
}

7. 断言

语法两种写法 :

  • 变量 as 类型 (常用写法)
  • <类型>变量

作用:用来告诉解析器变量实际类型

let e: unknown;
let s: string;
s = e as string // 此处如果不进行断言 赋值ts会报错
s = <string>e

8. &表示同时满足

let j: { name: string } & { age: number }
j = { name: '王五', age: 12 }

9. 类型别名

使用类型别名,能够有效减少类型的重复声明
语法: type 自定义类型名 = 类型取值

type mytype = 1 | 2 | 3
let k: mytype;
let h: mytype;
k = 2
h = 3

type myobj = {
  name: string,
  age: number
}
const obj:myobj ={
  name: '小李',
  age: 15
}

10. type和接口的区别

1:定义类型范围
interface只能定义对象类型。
type可以声明任何类型,基础类型、联合类型、交叉类型。

// 基础类型(相当于起别名)
type person = 'string';
// 联合类型
interface Dog {
  name:string
}
interface Cat {
  age:number
}
type animal = Dog | Cat;
// 元祖(指定某个位置具体是什么类型)
type animal = [Dog,Cat];
//交叉类型(多种类型的集合)
type animal = Dog & Cat;

2:合并声明
定义两个同名的type回报异常;
定义两个同名的interface会合并;


interface Dog {
  name:string;
}
interface Dog {
  age:number
}
// 合并为
interface Dog {
  name:string;
  age:number;
}

3:扩展性
interface可以使用extends,和implements,进行扩展

// interface extends interface
interface Dog {
  name:string;
}
interface Cat extends Dog {
  age:number;
}
// interface extends type
type Dog= {name:string};
interface Cat extends Dog {
  age:number;
}

但type可以使用交叉类型&进行合并

  // type & type
  type Dog = {name:string};
  type Cat = {age:number} & Dog;
  // tyep & interface
  interface Dog {
    name:string;
  }
  type Cat = {age:number} & interface;
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值