Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/fortran/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何在Typescript中以数组的形式获取类型的属性?_Javascript_Typescript - Fatal编程技术网

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

Javascript 如何在Typescript中以数组的形式获取类型的属性?,javascript,typescript,Javascript,Typescript,鉴于以下类型: class Foo { constructor( private one: string, private two: string, private three: string) { } } 我怎样才能拥有一个值是该类型属性的数组 e、 g.我需要能够获得一个数组,如下所示: [‘一’、‘二’、‘三’] 注意:我需要从类型而不是实例中提取属性,否则我可以简单地使用Object.keys(instanceOfFo

鉴于以下类型:

class Foo {
    constructor(
        private one: string, 
        private two: string, 
        private three: string) {
    }
}
我怎样才能拥有一个值是该类型属性的数组

e、 g.我需要能够获得一个数组,如下所示:

[‘一’、‘二’、‘三’]


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

如果您只需要从类中列出字段名称,则可以使用以下命令:

let fields = Object.keys(myObj) as Array<MyClass>;
let fields=Object.keys(myObj)作为数组;

希望有帮助。

您需要实例化
const a=new Foo()并使用对象键进行访问

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

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

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

const a = new Foo();
console.log(Object.keys(a)); // ["prop"]
编辑:
如果要从类型中获取,则不可能,因为一旦编译代码,类型将不可用。

因为上面的代码将传输到以下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
提取构造函数,并从中获取参数名称。线程显示了如何执行此操作。

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

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

class-Foo{
构造函数(){
这个,一个
这是2
这是3
这是4
}
}

console.log(Object.keys(Reflect.construct(Foo,[])))
Object.keys(Foo.prototype)
返回空数组。您需要使用默认值初始化值,例如
null
。否则它们将不会显示。@GetOffMyLawn它仍然是空的。请使用
new
以及
console.log(Object.keys(new Foo))
数组在哪里定义?每个都是数组还是有不同的数组属性?您希望如何使用它?没有数组,我希望能够基于类型上定义的键(字段)生成一个数组。好的,感谢您的澄清@玛雅你能用例子更详细地解释一下你的帖子吗?我现在无法理解它。我不认为你能从类型中得到它。正如我在帖子中解释的,我需要从类型而不是实例中获取此信息。您无法从类型中创建,因为所有类型在编译后都消失了。我知道如何基于另一个类型的键创建类型,例如
const myType:keyof Foo
,它将是:
one | two | three
,但我需要将其转换为
['one',two',three]的数组
实例化它有什么问题?正是我想要的。谢谢事实上,我也不需要初始化字段,它工作得很好。请注意,如果你是针对IE浏览器,它与IE不兼容。但它与
new
基本上不一样吗?这看起来像是C#的typescript版本reflection@NimaHakimi是的。“这相当于调用新目标(…args)。”,返回的是目标的实例。在这种情况下没有区别。