为了账号安全,请及时绑定邮箱和手机立即绑定

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 关注
  • 220 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号