TypeScript?中?Partial?和?Pick?用法
在 TypeScript 中,Partial 和 Pick 是兩個常用的工具類型(Utility Types),用于更靈活地操作對象類型,尤其適用于 API 請求、表單處理、組件 Props 等場景。
Partial 的用法
- 作用:將一個類型的所有屬性變?yōu)榭蛇x(即添加
?)。 - 適用場景:更新操作(如 PATCH 請求),只需傳入部分字段。
- 源碼實(shí)現(xiàn):
type Partial<T> = { [P in keyof T]?: T[P]; };
示例:
interface User {
id: number;
name: string;
email: string;
}
type UpdateUserDto = Partial<User>;
// 等價(jià)于:{ id?: number; name?: string; email?: string; }
const update: UpdateUserDto = { name: "Alice" }; // ? 合法
Pick 的用法
- 作用:從一個類型中挑選指定的屬性,組成一個新類型。
- 適用場景:API 返回時只暴露部分字段(如列表頁僅需
id和name),避免敏感信息泄露。 - 源碼實(shí)現(xiàn):
type Pick<T, K extends keyof T> = { [P in K]: T[P]; };
示例:
interface User {
id: number;
name: string;
email: string;
password: string;
}
type UserPreview = Pick<User, 'id' | 'name' | 'email'>;
// 等價(jià)于:{ id: number; name: string; email: string; }
const user: UserPreview = { id: 1, name: "Bob", email: "bob@example.com" }; // ? 合法
// user.password; // ? 報(bào)錯:類型中不包含 password
組合使用示例
結(jié)合 Partial 和 Pick 可實(shí)現(xiàn)更精細(xì)的類型控制:
// 創(chuàng)建時不需要 id,且 password 必填
type CreateUserDto = Omit<User, 'id'> & { password: string };
// 更新時排除 id,其他字段可選
type UpdateUserDto = Partial<Omit<User, 'id'>> & { id: number };
// 分頁查詢只允許篩選 name 和 email
type UserQueryParams = Partial<Pick<User, 'name' | 'email'>> & { page: number; pageSize: number };
關(guān)鍵區(qū)別總結(jié)
| 特性 | Partial<T> | Pick<T, K> |
|---|---|---|
| 目的 | 所有屬性變可選 | 只保留指定屬性 |
| 屬性數(shù)量 | 不變(但都可選) | 減少(僅保留 K 中的屬性) |
| 典型用途 | 更新請求、表單草稿 | 列表展示、安全字段暴露 |
?? 提示:兩者都只作用于第一層屬性,嵌套對象內(nèi)部不會遞歸處理。若需深層操作,可考慮使用第三方庫如 ts-toolbelt 或自定義遞歸工具類型。
到此這篇關(guān)于TypeScript 中 Partial 和 Pick 用法的文章就介紹到這了,更多相關(guān)TypeScript Partial Pick內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
前端原生js實(shí)現(xiàn)拖拽排課效果實(shí)例
這篇文章主要介紹了如何實(shí)現(xiàn)一個簡單的課程表拖拽功能,通過HTML、CSS和JavaScript的配合,我們實(shí)現(xiàn)了課程項(xiàng)的拖拽、放置和顯示功能,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下2025-02-02

