【TypeScirpt学习记录】一

1、type与interface

interface描述对象、类的结构
type将一个函数签名、一组联合类型、一个工具类型等等抽离成一个完整独立的类型

区别:
interface可以合并声明,但是type会提示重复定义(interface可以定义多次,但同一个type只能定义一次)
interface和type都可以实现继承,type是通过 & 交叉类型继承的,interface是使用extends继承

type res =  {
    code: 10001 | 1002;
    status: 'success' | 'failure'
}

type res2 =  res & {
    data: any
}
interface res {
    code: 10001 | 1002;
    status: 'success' | 'failure'
}

interface res2 extends res  {
    data: any
}

2、字面量类型和联合类型

interface ResProps = {
	code: 1000 | 10001 | 1004,
	status: 'success' | 'failed',
	data: any
}

上面的code和status,确定了值的集合,可以获取精确的提示,因为一般code和status都是和后端约定好的一些固定值。

字面量类型:

上文的status就是字面量类型,它比原始类型更为精确,可以分为一下几类

  • 字符串字面量类型
  • 数字字面量类型
  • 布尔值字面量类型
  • 对象字面量类型

它通常和联合类型使用,表示一组字面量类型。

interface Tmp {
  bool: true | false;
  num: 1 | 2 | 3;
  str: "lin" | "bu" | "du"
}

联合类型:

联合类型的常用场景之一是通过多个对象类型的联合

interface Tmp {
	user: {
		| {
			vip: true;
			expires: string;
		}
		| {
			vip: false;
			promotion: string;
		}
	}
}

根据vip类型来推导其他的类型。

3、枚举

enum xxx {
	HOME = 'localhost',
	DEV_URL = 'xxxxx'
}

枚举和对象的区别:
枚举是双向映射的,对象是单向映射,例如:

enum Items {
  Foo,
  Bar,
  Baz
}

const fooValue = Items.Foo; // 0
const fooKey = Items[0]; // "Foo"

仅有值为数字的枚举成员才能够进行这样的双向枚举,字符串枚举成员仍然只会进行单次映射

常量枚举,只是比普通枚举多了一个const,她只能通过枚举成员访问枚举值。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值