[英]Typescript access dynamic property with [' '] syntax
export class Foo{
someproperty: string;
}
這只是TypeScript中的一種約定,方便使用。 如果要訪問未在對象的類型簽名中定義的某個任意屬性,可以使用["foo"]
表示法,並且類型檢查器不會嘗試強制您正在訪問的實例具有此類屬性簽名中的屬性。
我發現傳遞對象屬性的方法是使用const myproperty = 'name' as const;
type MyObject = {
name: string,
age: number;
}
let obj:MyObject = {name: 'Ryu', age:30};
const myproperty = 'name' as const;
console.log(obj[myproperty])
例如,如果您想在調用sum()的函數上傳遞參數以求和所有屬性“ visited ”,另一次您想對同一函數中的所有交易求和,使用屬性“交易”,您可以將所有屬性放在一個數組並傳遞此數組的索引sum(0) 或 sum(1) 。
type Sale = {
id: number;
visited: number;
deals: number;
amount: number;
}
let data:Array<Sale> =[{id: 1, visited: 83, deals: 66, amount: 5501},
{id: 2, visited: 113, deals: 78, amount: 8290},
{id: 3, visited: 36, deals: 12, amount: 6096}]
const args = ['visited', 'deals', 'amount'] as const;
const sum = (property:number) => {
let total:number = 0;
data.forEach((element) => {
total += element[args[property]];
});
return total;
}
console.log(sum(0)) //Visited
console.log(sum(1)) //deals
console.log(sum(2)) //amount
或者您可以將enum
用於更一般的用途。
enum CategoryOfSum{
VISITED = 'visited',
DEDALS = 'deals',
AMOUNT = 'amount'
}
const sum = (type:CategoryOfSum) => {
let total:number = 0;
data.forEach((element) => {
total += element[type];
});
return total;
}
sum(CategoryOfSum.VISITED)
sum(CategoryOfSum.DEDALS)
sum(CategoryOfSum.AMOUNT)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.