代码之家  ›  专栏  ›  技术社区  ›  MaYaN

如何在typescript中以数组形式获取类型的属性?

  •  -2
  • MaYaN  · 技术社区  · 6 年前

    给定以下类型:

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

    如何使用值是类型属性的数组?

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

    [一'、'二'、'三']

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

    5 回复  |  直到 6 年前
        1
  •  6
  •   Get Off My Lawn    6 年前

    你可以使用 Reflect.construct() 要获得钥匙,请使用 Object.keys() 将其转换为数组。

    注: 如果该键没有默认值,则不会像您看到的那样生成它。 four .

    class Foo {
      constructor() {
        this.one = ''
        this.two = ''
        this.three = ''
        this.four
      }
    }
    
    console.log(Object.keys(Reflect.construct(Foo, [])))
        2
  •  1
  •   eavichay    6 年前

    扫描object.keys(foo.prototype)

        3
  •  1
  •   Jose Anibal Rodriguez    6 年前

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

    let fields = Object.keys(myObj) as Array<MyClass>;
    

    希望它有帮助。

        4
  •  1
  •   Nima Hakimi    6 年前

    因为上面的代码将被传递到下面的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 线程显示了如何做到这一点。

        5
  •  1
  •   Sajeetharan    6 年前

    你需要实例化 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

    编辑: 如果要从类型中获取,则不可能,因为编译代码后类型将不可用。