TypeScript 常用工具(Partial、Readonly、Record、Pick、Omit、Required、InstanceType)

工具类型

Partial

构造类型 Type,并将它所有的属性设置为可选的。它的返回类型表示输入类型的所有子类型。

type Person = {
  name: string,
  age: number,
  sex?: string,
};

type Teacher = Partial<Person>;
type Teacher = {
  name?: string | undefined,
  age?: number | undefined,
  sex?: string | undefined,
};

Readonly

构造类型 Type,并将它所有的属性设置为 readonly,也就是说构造出的类型的属性不能被再次赋值。

type Person = {
  name: string;
  age: number;
  sex?: string;
};

type Teacher = Readonly<Person>;
type Teacher = {
    readonly name: string;
    readonly age: number;
    readonly sex?: string | undefined;
}

Record<Keys, Type>

构造一个类型,其属性名的类型为 K,属性值的类型为 T。这个工具可用来将某个类型的属性映射到另一个类型上。

type Person = {
  name: string,
  age: number,
  sex?: string,
};

type Teacher = Record<"data", Person>;
type Teacher = {
  data: Person,
};

Pick<Type, Keys>

从类型 Type 中挑选部分属性 Keys 来构造类型。

type Person = {
  name: string,
  age: number,
  sex?: string,
};

type Teacher = Pick<Person, "name" | "sex">;
type Teacher = {
  name: string,
  sex?: string | undefined,
};

Omit<Type, Keys>

从类型 Type 中获取所有属性,然后从中剔除 Keys 属性后构造一个类型。

type Person = {
  name: string,
  age: number,
  sex: string,
};
// 去除一个
type Teacher = Omit<Person, "sex">;
type Teacher = {
  name: string,
  age: number,
};

// 去除多个写法
type Student = Omit<Person, "sex" | "age">;
type Student = {
  name: string,
};

Required

构建一个类型,使类型 Type 的所有属性为 required。 与此相反的是 Partial。

type Person = {
  name: string,
  age: number,
  sex?: string,
};

type Teacher = Required<Person>;
type Teacher = {
  name: string,
  age: number,
  sex: string,
};

InstanceType

由构造函数类型 Type 的实例类型来构建一个新类型。

class C {
  x = 0;
  y = 0;
}

type T0 = InstanceType<typeof C>; // C
type T1 = InstanceType<any>; // any
type T2 = InstanceType<never>; // any
type T3 = InstanceType<string>; // Error
type T4 = InstanceType<Function>; // Error
<Child  ref="child" />
import { ref, onMounted } from 'vue';
import Child from './Child.vue';
const child = ref<InstanceType<typeof Child> | null>(null);

onMounted(() => {
  console.log('child', child.value?.name);
});
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值