新聞中心
在 TypeScript 中,我們可以使用反射(Reflection)來獲取類型屬性的名稱,反射是計算機(jī)編程中的一種能力,它允許程序在運行時檢查和修改其自身的結(jié)構(gòu)和行為,在 TypeScript 中,我們可以使用 typeof 關(guān)鍵字和 keyof 關(guān)鍵字來實現(xiàn)反射。

創(chuàng)新互聯(lián)自2013年起,先為沈陽等服務(wù)建站,沈陽等地企業(yè),進(jìn)行企業(yè)商務(wù)咨詢服務(wù)。為沈陽企業(yè)網(wǎng)站制作PC+手機(jī)+微官網(wǎng)三網(wǎng)同步一站式服務(wù)解決您的所有建站問題。
1、使用 typeof 關(guān)鍵字獲取類型名稱
typeof 關(guān)鍵字用于獲取一個變量或表達(dá)式的類型。
let num: number = 42; console.log(typeof num); // 輸出 "number"
2、使用 keyof 關(guān)鍵字獲取類型屬性名稱
keyof 關(guān)鍵字用于獲取一個類型的所有屬性名稱。
interface Person {
name: string;
age: number;
}
type PersonKeys = keyof Person; // "name" | "age"
3、結(jié)合 typeof 和 keyof 關(guān)鍵字獲取類型屬性名稱
我們可以結(jié)合 typeof 和 keyof 關(guān)鍵字來獲取一個類型的所有屬性名稱。
interface Person {
name: string;
age: number;
}
function getPropertyNames(obj: T): (keyof T)[] {
return Object.keys(obj) as (keyof T)[];
}
let person: Person = { name: "張三", age: 30 };
let propertyNames: (keyof Person)[] = getPropertyNames(person); // ["name", "age"]
在這個例子中,我們定義了一個名為 getPropertyNames 的泛型函數(shù),它接受一個對象作為參數(shù),并返回該對象的所有屬性名稱,我們使用 Object.keys() 方法獲取對象的屬性名稱,然后將其轉(zhuǎn)換為 (keyof T)[] 類型,這樣,我們就可以為任何類型獲取其屬性名稱了。
4、使用 in 關(guān)鍵字檢查類型是否具有某個屬性
我們還可以使用 in 關(guān)鍵字來檢查一個類型是否具有某個屬性。
interface Person {
name: string;
age: number;
}
function hasProperty(obj: T, prop: keyof T): boolean {
return prop in obj;
}
let person: Person = { name: "張三", age: 30 };
console.log(hasProperty(person, "name")); // 輸出 true
console.log(hasProperty(person, "gender")); // 輸出 false
在這個例子中,我們定義了一個名為 hasProperty 的泛型函數(shù),它接受一個對象和一個屬性名稱作為參數(shù),并返回一個布爾值,表示該對象是否具有該屬性,我們使用 in 關(guān)鍵字來檢查對象是否具有給定的屬性,這樣,我們就可以為任何類型檢查其是否具有某個屬性了。
5、使用條件類型和映射類型獲取類型屬性名稱數(shù)組
我們還可以使用條件類型和映射類型來獲取一個類型的所有屬性名稱數(shù)組。
interface Person {
name: string;
age: number;
}
type PropertyNames = { [K in keyof T]: K } extends { [_: never]: infer U } ? U extends string ? U[] : never : never;
let propertyNames: PropertyNames = ["name", "age"]; // ["name", "age"]
在這個例子中,我們定義了一個名為 PropertyNames 的類型,它接受一個類型參數(shù) T,我們使用條件類型和映射類型來生成一個新的類型,該類型的屬性名稱與 T 的類型屬性名稱相同,我們將這個新類型的屬性名稱轉(zhuǎn)換為字符串?dāng)?shù)組,這樣,我們就可以為任何類型獲取其屬性名稱數(shù)組了。
名稱欄目:TypeScript獲取類型屬性名稱
鏈接URL:http://m.fisionsoft.com.cn/article/cogsish.html


咨詢
建站咨詢
