TypeScript常用工具类型(Utility Types)

目录

前言

一、Partial

二、Required

三、Readonly

总结


前言

TypeScript提供了很多工具类型,供使用者方便的从一个类型转换到另一个类型。下面介绍几种常用的工具类型和使用场景,以便更好的应用TypeScript校验,减少我们代码出错的机率。


一、Partial<Type>

构造一种类型,所有的字段均转为可选字段。使用场景可能是,一个类型都是必选字段。但是我们只想更新这个类型中的一个或者多个不确定的字段。

比如以下列子:

interface Todo {
  field1: string;
  field2: string;
}

const todo1: Todo = {
  field1: "field1 value",
  field2: "field2 value",
};

function updateTodo(todo: Todo, fieldsToUpdate: Partial<Todo>) {
  return { ...todo, ...fieldsToUpdate };
}

const todo2: Todo = updateTodo(todo1, {
  field2: "update field2 value",
});

console.log("start");
console.log("todo1", todo1);
console.log("update field2");
console.log("todo2", todo2);

我们看到一个初始化的todo1为Todo类型,如果只更新一个字段,由于field1和field2都是必选字段。那么肯定得报类型校验错误。使用Partial关键字可以解决此问题。

运行以上例子:得到结果:

start
todo1 { field1: 'field1 value', field2: 'field2 value' }
update field2
todo2 { field1: 'field1 value', field2: 'update field2 value' }

二、Required<Type>

和Partial相反,可以把一个类型中所有的可选字段,转为必选字段。

interface Props {
    a?: number;
    b?: string;
}
//正确
const obj: Props = { a: 5 };
//报错,类型 "{ a: number; }" 中缺少属性 "b",但类型 "Required<Props>" 中需要该属性。
const obj2: Required<Props> = { a: 5 };

使用Required关键字,可以在某些情况下,强制传递必要的参数。

三、Readonly<Type>

将一个类型的所有字段变成一个只读类型。防止中间传递时被修改。当然,对初始化的数据,也可以使用关键字const

interface MyType {
    title: string;
    value?: string;
}

const todo: Readonly<MyType> = {
    title: "this is a title",
};
//无法为“title”赋值,因为它是只读属性。
todo.title = "Hello";
//可选字段也无法再次赋值
//无法为“value”赋值,因为它是只读属性。
todo.value = "test";

 当然,如果只想某个字段为只读。我们可以使用字段关键字readonly


总结

还有很多其他的工具类型,比如Exclude,NonNullable,Pick,Record,等等比较多,不再一一列举。如果有兴趣,可以参看官方相关文档

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值