亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

TypeScript 中類的動態 getter 和設置

TypeScript 中類的動態 getter 和設置

偶然的你 2022-06-05 15:46:02
我在課堂上使用動態 getter 檢索數據時遇到問題。這是我得到的錯誤:元素隱式具有“任何”類型,因為“字符串”類型的表達式不能用于索引類型“UserProps”。在類型“UserProps”.ts(7053) 上未找到具有“字符串”類型參數的索引簽名這是代碼interface UserProps {  name?: string;  age?: number;}export class User {  constructor(private data: UserProps) {}  get(propName: string): number | string {    return this.data[propName];  }  set(update: UserProps): void {    Object.assign(this.data, update);  }}
查看完整描述

1 回答

?
不負相思意

TA貢獻1777條經驗 獲得超10個贊

我能找到的最干凈的解決方案如下:


interface UserProps {

    name?: string;

    age?: number;

}


export class User {

    constructor(private data: UserProps) {}


    // Add generic magic here

    get<K extends keyof UserProps>(propName: K): UserProps[K] {

        return this.data[propName];

    }


    set(update: UserProps): void {

        Object.assign(this.data, update);

    }

}

或者,您可以添加任意鍵索引以及更新 get 語句的類型。


interface UserProps {

    name?: string;

    age?: number;

    // this next line is important

    [key: string]: string | number | undefined;

}


export class User {

    constructor(private data: UserProps) {}


    // number|string changed to number|string|undefined

    get(propName: string): number | string | undefined {

        return this.data[propName];

    }


    set(update: UserProps): void {

        Object.assign(this.data, update);

    }

}


查看完整回答
反對 回復 2022-06-05
  • 1 回答
  • 0 關注
  • 215 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號