簡體   English   中英

Typescript 使用 [' '] 語法訪問動態屬性

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM