六個 TypeScript 實用函數(shù)
TypeScript 是 JavaScript 的超集,它為該語言添加了靜態(tài)類型和其他功能。TypeScript 最強大的功能之一是它對實用函數(shù)的支持,它允許開發(fā)人員以強大的方式操作類型。
在本文中,我們將分享6個開發(fā)者必須知道的 TypeScript 實用函數(shù),并為每個函數(shù)提供示例和解釋。
01、Partial<T>
Partial函數(shù)允許您通過將原始類型 T 的所有屬性設為可選來創(chuàng)建新類型。當您有一個具有許多屬性的復雜類型時,這會很有用,但您只需要在特定的上下文中提供其中的一些。
例如,假設您有一個具有多個必需屬性的 Person 接口:
interface Person {
firstName: string;
lastName: string;
age: number;
address: Address;
}
interface Address {
street: string;
city: string;
state: string;
zip: string;
}
如果你想創(chuàng)建一個新類型,它具有與 Person 相同的屬性,但所有屬性都是可選的,你可以像這樣使用 Partial 效用函數(shù):
type PartialPerson = Partial<Person>;
現(xiàn)在您可以創(chuàng)建一個 PartialPerson 類型的變量,并且只提供您需要的屬性:
const partialPerson: PartialPerson = {
firstName: 'John',
lastName: 'Doe'
};
02、Required<T>
Required 實用程序函數(shù)通過使原始類型 T 的所有屬性成為必需來創(chuàng)建新類型。當您有一個帶有可選屬性的類型,但您希望確保在特定上下文中提供所有屬性時,這可能很有用。
繼續(xù)前面示例中的 Person 接口,假設您要創(chuàng)建一個新類型,該類型具有 Person 所需的所有屬性。您可以像這樣使用 Required 實用程序函數(shù):
type RequiredPerson = Required<Person>;
現(xiàn)在您可以創(chuàng)建 RequiredPerson 類型的變量并確保提供所有屬性:
const requiredPerson: RequiredPerson = {
firstName: 'John',
lastName: 'Doe',
age: 30,
address: {
street: '123 Main St',
city: 'Anytown',
state: 'CA',
zip: '12345'
}
};
03、Readonly<T>
Readonly 實用程序函數(shù)通過將原始類型 T 的所有屬性設置為只讀來創(chuàng)建新類型。當您有一個在創(chuàng)建后不應修改的類型時,這會很有用。
例如,假設您有一個具有多個屬性的用戶界面:
interface User {
id: number;
username: string;
email: string;
password: string;
}
如果你想創(chuàng)建一個新類型,它具有與 User 相同的屬性,但所有屬性都是只讀的,你可以像這樣使用 Readonly 實用函數(shù):
type ReadonlyUser = Readonly<User>;
現(xiàn)在你可以創(chuàng)建一個 ReadonlyUser 類型的變量,并確保它的任何屬性都不能被修改:
const user: ReadonlyUser = {
id: 1,
username: 'johndoe',
email: 'john.doe@example.com',
password: 'password123'
};
user.id = 2; // Error: Cannot assign to 'id' because it is a read-only property.
04、Record<K, T>
Record 實用程序函數(shù)通過將類型 K 的鍵映射到類型 T 的值來創(chuàng)建新類型。當您要創(chuàng)建表示具有特定鍵的一組值的類型時,這會很有用。
例如,假設您有一組要表示為對象的錯誤代碼,其中鍵是錯誤代碼,值是錯誤消息:
type ErrorCode = 'E001' | 'E002' | 'E003';
type ErrorMessages = Record<ErrorCode, string>;
const errorMessages: ErrorMessages = {
E001: 'An error occurred.',
E002: 'Another error occurred.',
E003: 'Yet another error occurred.'
};
現(xiàn)在您可以通過相應的錯誤代碼訪問錯誤消息:
const errorMessage = errorMessages['E001']; // 'An error occurred.'
05、Exclude<T, U>
Exclude 實用程序函數(shù)通過從類型 T 中排除聯(lián)合 U 中的所有類型來創(chuàng)建新類型。這在您想要定義僅包含某些類型的類型時非常有用。
例如,假設您的 Color 類型包含多個可能的顏色值:
type Color = 'red' | 'green' | 'blue' | 'yellow';
如果你想定義一個排除某些顏色值的類型,你可以像這樣使用 Exclude 實用函數(shù):
type PrimaryColor = Exclude<Color, 'green' | 'purple'>;
現(xiàn)在您可以創(chuàng)建一個 PrimaryColor 類型的變量并確保它只包含原色:
const primaryColor: PrimaryColor = 'red'; // OK
const secondaryColor: PrimaryColor = 'green'; // Error: Type 'green' is not assignable to type 'PrimaryColor'.
06、Omit<T, K>
Omit 實用程序函數(shù)通過從原始類型 T 中省略指定的屬性 K 來創(chuàng)建新類型。當您有一個具有許多屬性的類型,但您想創(chuàng)建一個沒有某些屬性的新類型時,這會很有用。
例如,假設您有一個具有多個屬性的用戶界面:
interface User {
id: number;
username: string;
email: string;
password: string;
}
如果你想創(chuàng)建一個新的類型,它具有除密碼之外的用戶的所有屬性,你可以使用 Omit 實用函數(shù),如下所示:
type UserWithoutPassword = Omit<User, 'password'>;
現(xiàn)在您可以創(chuàng)建一個 UserWithoutPassword 類型的變量,而無需提供密碼屬性:
const userWithoutPassword: UserWithoutPassword = {
id: 1,
username: 'johndoe',
email: 'john.doe@example.com',
};
總之,TypeScript 實用程序函數(shù)是開發(fā)人員的強大工具,允許更靈活和可重用的代碼。
通過有效地理解和使用這些實用函數(shù),開發(fā)人員可以創(chuàng)建更健壯和可維護的 TypeScript 代碼。這些功能只是 TypeScript 語言的一小部分,但它們會對您的代碼質量和開發(fā)團隊的工作效率產(chǎn)生重大影響。