公交车上荫蒂添的好舒服的电影-公用玩物(np双xing总受)-公用小荡货芊芊-公与妇仑乱hd-攻把受做哭边走边肉楼梯play-古装一级淫片a免费播放口

LOGO OA教程 ERP教程 模切知識交流 PMS教程 CRM教程 開發文檔 其他文檔  
 
網站管理員

20 個 TypeScript 技巧改變你的代碼!

admin
2024年11月13日 19:35 本文熱度 1117

TypeScript 以類型安全及強大特性強化了 JavaScript,然而眾多開發者僅運用其基礎功能。在此為您呈現一份涵蓋 20 個高級 TypeScript 技巧的指南,這些技巧有助于提升生產力、代碼可維護性,利于提高代碼效率與可讀性。每個技巧均佐以實用代碼示例加以闡釋。

1. NonNullable:剔除 null 與 undefined 類型

type User = { name: string; age?: number | null };
const userAge: NonNullable<User['age']> = 30// No null or undefined?

2. Partial:使所有屬性變為可選屬性

interface User {
  name: string;
  age: number;
  email: string;
}
const updateUser = (user: Partial<User>) => ({ ...user, updatedAt: new Date() });
updateUser({ name: 'John' });

3. Readonly:強制實現只讀屬性

const config: Readonly<{ apiUrl: string; retries: number }> = {
  apiUrl: 'https://api.com',
  retries: 5,
};
config.apiUrl = 'https://newapi.com'// Error

4. Mapped Types:動態地轉換現有類型

type Status = 'loading' | 'success' | 'error';
type ApiResponse<T> = { [K in Status]: T };
const response: ApiResponse<string> = { loading: 'Loading...', success: 'Done', error: 'Error' };

5. Optional Tuple Elements:使用變形 tuple 類型。

type UserTuple = [stringnumber?, boolean?];
const user1: UserTuple = ['Rob']; // Only name

6. Union Exhaustiveness:確保所有情況都被處理

type Status = 'open' | 'closed' | 'pending';
function handleStatus(status: Status{
  switch (status) {
    case 'open':
      return 'Opened';
    case 'closed':
      return 'Closed';
    case 'pending':
      return 'Pending';
    default:
      const exhaustiveCheck: never = status;
      return exhaustiveCheck;
  }
}

7. Omit:從類型中移除屬性

interface Todo {
  title: string;
  description: string;
  completed: boolean;
}
type TodoPreview = Omit<Todo, 'description'>;
const todo: TodoPreview = { title: 'Learn TypeScript', completed: false };

8. Type Narrowing:使用 in 和 instanceof 來縮小類型

function processInput(input: string | number | { title: string }{
  if (typeof input === 'string'return input.toUpperCase();
  if ('title' in input) return input.title.toUpperCase();
}

9. Conditional Types:應用條件邏輯

type IsString<T> = T extends string ? true : false;
type CheckString = IsString<'Hello'>; // true

10. 使用 as const 創建字面類型

const COLORS = ['red''green''blue'as const;
type Color = (typeof COLORS)[number]; // 'red' | 'green' | 'blue'

11. Extract and Exclude:過濾聯合類型

type T = 'a' | 'b' | 'c';
type OnlyAOrB = Extract<T, 'a' | 'b'>; // 'a' | 'b'

12. 自定義類型守衛

function isString(input: any): input is string {
  return typeof input === 'string';
}

13. Record:動態對象類型

type Role = 'admin' | 'user' | 'guest';
const permissions: Record<Role, string[]> = { admin: ['write'], user: ['read'], guest: ['view'] };

14. Index Signatures:添加動態屬性

class DynamicObject {
  [key: string]: any;
}
const obj = new DynamicObject();
obj.name = 'Rob';

15. Never Type:用于詳盡的檢查

function assertNever(value: never): never {
  throw new Error(`Unexpected: ${value}`);
}

16. Optional Chaining:使用可選鏈

const user = { profile: { name: 'John' } };
const userName = user?.profile?.name; // 'John'

17. Null 合并操作符

const input: string | null = null;
const defaultValue = input ?? 'Default'// 'Default'

18. ReturnType:推導函數返回類型。

function getUser() {
  return { name: 'John', age: 30 };
}
type UserReturn = ReturnType<typeof getUser>;

19. Generics:可變函數類型。

function identity<T>(value: T): T {
  return value;
}
identity<string>('Hello'); // 'Hello'

20. Intersection Types:組合多個類型。

type Admin = { privileges: string[] };
type User = { name: string };
type AdminUser = Admin & User;

總結

這些技巧中的每一個都突出了編寫更簡潔、更可靠的 TypeScript 代碼的方法。使用這些技巧,你可以充分利用 TypeScript 的完整類型系統,實現更安全、更易于維護的開發。


該文章在 2024/11/14 11:38:35 編輯過
關鍵字查詢
相關文章
正在查詢...
點晴ERP是一款針對中小制造業的專業生產管理軟件系統,系統成熟度和易用性得到了國內大量中小企業的青睞。
點晴PMS碼頭管理系統主要針對港口碼頭集裝箱與散貨日常運作、調度、堆場、車隊、財務費用、相關報表等業務管理,結合碼頭的業務特點,圍繞調度、堆場作業而開發的。集技術的先進性、管理的有效性于一體,是物流碼頭及其他港口類企業的高效ERP管理信息系統。
點晴WMS倉儲管理系統提供了貨物產品管理,銷售管理,采購管理,倉儲管理,倉庫管理,保質期管理,貨位管理,庫位管理,生產管理,WMS管理系統,標簽打印,條形碼,二維碼管理,批號管理軟件。
點晴免費OA是一款軟件和通用服務都免費,不限功能、不限時間、不限用戶的免費OA協同辦公管理系統。
Copyright 2010-2025 ClickSun All Rights Reserved

主站蜘蛛池模板: 国产精品亚洲w码日韩中文app | 国产精品亚洲二区第一页 | 国产成人午夜福利高清在线 | 国产主播在线喷水白浆 | 成人午夜a级毛片免费 | 成人国产精品日本在线观看 | 国产一级aa黄毛片 | 91看片淫黄| 波多野结衣一区二区三区在线观看 | 国产成人精品免费视频大全麻 | 白丝爆浆18禁一区二区三区 | av日韩国产一区二 | 国精产品一区二区三区公司 | 东京热无码人妻一区二区av | 国产成人鲁鲁免费视频 | 国产无码第一页国产视频在 | 国产精品成人在线 | 91人妻国产麻豆88 | 岛国精品一区免费视频在线 | 国产综合成人亚洲 | 国产午夜无码片在线观看影视 | 东京热加勒比高清 | 国产精品视频一区视频二区 | 91精品福利尤物视频 | 国产精品欧美亚洲大片在线观看 | 成入网免费在线观看不卡午夜 | 岛亚洲品质网站入口 | 国产经典在线观看一区 | 精品亚洲一区二区在线播 | 国产精品一级毛片无码老人 | 国产亚洲一区二区三区啪 | 国产精品无码av在线播放 | 国产精品一区二区在线观看99 | 国产精彩视频在线观看91 | 国产一区二区三区四区二区 | 国产不卡视频在线播放 | 国产成人无码精品a级毛片抽搐 | 成人区人妻精品一区二 | 国产91无码福利在线 | 国产成人久久综合一区77 | 国产微拍视频手机在线播放 |