使用交叉类型来扩展属性:
// 假设 Slice 对象是通过npm安装的一个reduxjs中的类型type Slice = {name: string}// 通过交叉类型扩展属性type ExtSlice = Slice & {username: string}const userSlice: ExtSlice = {name: 'aa',username: 'admin'}// 小案例 , 假设有下面这样的场景 , 我们可以通过交叉类型实现属性的扩展import { Request, Response } from 'express'const express = require('express')const app = express()app.listen(9000)app.get('/api/users', (req: Request & { html: string }, res: Response) => {// html属性它是我们自定义提供 是开发者自己创建的req.html = 'abc'res.send('aaa')})
3.15 类型断言
**断言:**断定某一个类型或值 。有些情况下 , 变量的类型对于我们来说是很明确 , 但是TS编译器却并不清楚 , 此时 , 可以通过类型断言来告诉编译器变量的类型 。
语法:[值 as 类型] 或 [值]
类型断言:
假设现在有一个 arg 变量 , 它既可能是类型也可能是类型 , 当我们访问它的属性时 , 就会报错 , 原因是 , arg 如果为类型的话 , 就没有属性 。想要解决这一问题 , 我们有两种方法:
类型保护
function fn(arg: number | string) {// string类型上面是有length属性 , 但是number它没有 , 所以你直接用 , 它就会报错 , number也是有可能的// 类型保护if (typeof arg === 'string') return arg.lengthreturn arg}
断言
function fn(arg: number | string) {// string类型上面是有length属性 , 但是number它没有 , 所以你直接用 , 它就会报错 , number也是有可能的// 断言它现在一定是一个string类型的变量// return (arg).lengthreturn (arg as string).length}
值断言:
值断言指用符号!:表示当前变量一定会有值 , 不会为空 。
class Person {// 属性暂时可能没有赋值 , 但是后续我一定会赋值给它 , 所以可以用一个断言非空name!: string// 也可以在构造函数中赋值// constructor(name: string) {//this.name = name// }}
链判断符:
判断?.左侧对象是否为 null 或 , 如果是就返回。
res?.data相当于:res == null ?: res.data
- 阿里山旅游攻略,阿里山旅游攻略一日游
- 罗布泊究竟有多危险?中国四大无人区之一、充满神秘的地球之耳 度中国之最
- 阳光假日
- 中科水景设计、建造的迪拜海上文旅夜游项目,创吉尼斯世界纪录 夜游吉尼斯记录
- 马蹄蟹
- 胡杨、沙漠、碧水、蓝天……这个县全年旅游收入有望过亿元 策勒吉尼斯记录
- 风景区规划
- 老梁:真实的罗斯柴尔德家族,并不像传说中那么神秘、有钱 老梁解读历史之最
- 黄花岗72烈士
- 2、第一个Mybatis程序