【问题标题】:Typescript dynamically properties typing打字稿动态属性打字
【发布时间】:2017-01-08 19:44:22
【问题描述】:

我有一个类,它接受一个对象,我想将他的属性设置为实例的 this

class Test {
  constructor(config) {
   for(let field in config) {
      this[field] = config[field];
    }
  }
}

const test = new Test({name: "JOHN", age: 13});

配置对象是动态的,可以是任何属性;有什么方法可以让我在启动后获得 Intellisense?

例如,现在当我输入 test 和 dot 时,我想获取 Intellisense,因为配置对象属性是该类的成员。

【问题讨论】:

  • 为什么要这样做?为什么不将配置作为类的成员?
  • 这是一个复杂的答案。我只需要这样做。
  • 好吧,由于您提供的信息有限,答案是不,您将无法获得类型信息(对于 Intellisense )。如果您需要帮助,您需要解释您的问题/场景。
  • 我刚刚在问题中解释了。我想为实例动态添加属性。
  • 如果您事先不知道属性,那么您希望获得什么类型的信息?如果您在编写代码时知道它们,那么它们就不是动态的。您需要做出决定,或者再一次:更好地解释您的问题/场景。

标签: javascript typescript casting


【解决方案1】:

我认为你能得到的最接近的是具有泛型属性的泛型类

class Test<T> {
  constructor(public config: T) { }
}

interface Person {
  name: string;
  age: number;
}
const test = new Test<Person>({ name: "JOHN", age: 13 });

test.config.name

类型不会改变您的代码,它们只是设计时工件。类型只会在编译时“蒸发”,因此 TypeScript 无法为运行时发生的事情提供智能感知。

【讨论】:

    猜你喜欢
    • 2020-12-29
    • 1970-01-01
    • 2021-09-23
    • 2018-05-17
    • 1970-01-01
    • 2020-08-04
    • 2020-01-19
    • 1970-01-01
    • 2021-01-19
    相关资源
    最近更新 更多