Skip to Content

面试导航 - 程序员面试题库大全 | 前端后端面试真题 | 面试

Typescript高级类型:Required

在 TypeScript 中,Required 是一个 内置的泛型工具类型,用于将类型中的所有属性变为 必填。默认情况下,TypeScript 会推断对象类型时,某些属性是可选的,而 Required 类型可以通过将所有属性变为必填来强制要求所有属性都必须存在。

Required 工具类型会将对象类型中所有的属性都从 可选optional)转换为 必填required)。它通过映射类型(Mapped Types)实现,遍历对象的每个属性并将其类型修改为必填。

Required 的语法

Required<T>;

在上面的代码中 T 是传入的类型,它通常是一个包含可选属性的对象类型。Required<T> 是返回一个新类型,它将 T 中的所有属性变为必填(即不可选)。

假设有一个接口,包含一些可选属性:

interface User { id: number; name?: string; // 可选属性 age?: number; // 可选属性 }

在这个例子中,nameage 都是可选属性。如果你想强制所有属性都是必填的,可以使用 Required

type RequiredUser = Required<User>; const user1: RequiredUser = { id: 1, name: 'Alice', age: 30, }; // 错误:缺少 name 和 age 属性 const user2: RequiredUser = { id: 2, };

通过 Required<User>RequiredUser 类型中的 nameage 都变成了必填项。这样在创建 RequiredUser 类型的对象时,必须提供所有的属性。

如下图所示:

如何实现 Required 类型

Required 是 TypeScript 内置的工具类型,它背后实现的核心是映射类型(Mapped Types)。它的工作原理是:遍历对象类型的每个属性,并通过 -? 操作符将每个属性的可选标记移除。

type MyRequired<T> = { [P in keyof T]-?: T[P]; };

在上面的代码中:

  • [P in keyof T]:遍历类型 T 的每个属性。

  • -?:移除属性的可选标记,确保每个属性变为必填。

  • T[P]:使用原本属性的类型。

Required 与可选属性的关系

Required 只会影响对象类型中原本定义为可选的属性。如果属性已经是必填的,则不会有任何变化。

interface Product { id: number; title?: string; // 可选属性 price: number; // 必填属性 } type RequiredProduct = Required<Product>; // 结果: RequiredProduct = { id: number; title: string; price: number; } // title 属性从可选变为必填

在上面的例子中,title 属性从原本的可选变为必填,idprice 属性则不受影响,因为它们本来就是必填的。

总结

Required 是 TypeScript 的一个内置工具类型,用于将对象类型中的所有可选属性转换为必填属性。它通过遍历类型的每个属性,并移除其可选标记 (-?),确保所有属性都必须提供。这个工具常用于需要强制所有字段存在的场景,比如配置对象或 API 响应。

最后更新于:
Copyright © 2025Moment版权所有粤ICP备2025376666