如何在Typescript中将类型的属性获取为数组?

时间:2018-09-25 15:28:03

标签: javascript typescript

给出以下类型:

class Foo {
    constructor(
        private one: string, 
        private two: string, 
        private three: string) {
    }
}

如何拥有一个其值是类型属性的数组?

例如我需要能够得到一个数组:

  

[“一个”,“两个”,“三个”]

请注意,我需要从类型而不是实例中提取属性,否则我可以简单地使用Object.keys(instanceOfFoo)

5 个答案:

答案 0 :(得分:6)

您可以使用Reflect.construct()获取密钥,然后使用Object.keys()将其转换为数组。

注意:如果密钥没有默认值,则不会生成,如您在four中看到的那样。

class Foo {
  constructor() {
    this.one = ''
    this.two = ''
    this.three = ''
    this.four
  }
}

console.log(Object.keys(Reflect.construct(Foo, [])))

答案 1 :(得分:1)

扫描Object.keys(Foo.prototype)

答案 2 :(得分:1)

如果您只是要列出一类的字段名称,则可以使用以下内容:

article.tplx

希望有帮助。

答案 3 :(得分:1)

您需要实例化 const a = new Foo(); 并使用 Object.keys

进行访问
class Foo {
    constructor(
        private one: string, 
        private two: string, 
        private three: string) {
    }
}

const a = new Foo();
console.log(Object.keys(a)); // ["prop"]

DEMO

编辑: 如果您想从类型中获取数据,那是不可能的,因为一旦代码被编译,类型将不再可用。

答案 4 :(得分:1)

由于上面的代码将被转换为以下js代码:

var Foo = (function () {
    function Foo(one, two, three) {
        this.one = one;
        this.two = two;
        this.three = three;
    }
    return Foo;
}());

我首先使用const c = Foo.prototype.constructor提取构造函数,并从中获取参数名称。 This线程显示了如何执行此操作。