【问题标题】:Using get set methods dynamically动态使用 get set 方法
【发布时间】:2021-03-19 21:08:51
【问题描述】:

我的班级:

export class User {
    name: string;
    age: number;

    getName(): string {
        return this.name;
    }

    setName(name: string): void {
        this.name = name;
    }

    getAge(): number{
        return this.age;
    }

    setAge(age: number): void {
        this.age = age;
    }
}

我想动态使用 set 和 get 方法,示例;

User user = new User();
user.setMethod('name', 'John');  // 'name' or 'setName' (string value)
const exampleName = user.getMethod('name')  // 'name' or 'getName' (string value)

这可以用角度来实现吗?谢谢...

【问题讨论】:

  • 你为什么想要那个?如果你想要属性方法,有getset
  • Angular 的使用不会影响 JavaScript 的基本语法和语义。
  • 我真的很不清楚你想要什么(或者为什么)?
  • User user = new User(); -- 这不是有效的 TS 语句。
  • MarkusDresch, Liam 这只是一个例子。我有一个有 40 个参数的类,我用 40 个参数逐一检查传入的数据。但是使用这种方法,只有一行。

标签: typescript types


【解决方案1】:

要拥有类型,您必须添加泛型类型,但它也会列出 getter/setter 方法。

export class User {
    name: string;
    age: number;

    getMethod<K extends keyof this>(key: K): this[K]{
        return this[key];
    }

    setMethod<K extends keyof this>(key: K, value: this[K]): void {
        this[key] = value;
    }
}

new User().getMethod('age') // number
new User().setMethod('age', 5) // ok
new User().setMethod('age', '5') // error

【讨论】:

  • Akxe,你能帮帮我吗?我无法向方法发送动态值。例如: const exampleString: string = 'age';新用户().getMethod(exampleString);这给出了错误
  • 当然string'age' | 'name'是不一样的。如果您不将exampleString 的类型指定为string,而是指定为'age' 或什么都不指定(从值推断类型),它将起作用。如果您因为其他功能而需要它,则需要先了解 typescript generic,但这超出了这个问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-12-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-09-07
  • 1970-01-01
相关资源
最近更新 更多