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)。”,返回的是目标的实例。在这种情况下没有区别。