Javascript 在Angular 5/TypeScript中获取类(接口)属性,而不指定默认值
让我们假设我有一个接口A,我按照Angular style指南将其声明为一个类。这个类有很多属性,我想在不给它们赋值的情况下获取它们的名称。我怎样才能做到这一点 A类:Javascript 在Angular 5/TypeScript中获取类(接口)属性,而不指定默认值,javascript,angular,typescript,Javascript,Angular,Typescript,让我们假设我有一个接口A,我按照Angular style指南将其声明为一个类。这个类有很多属性,我想在不给它们赋值的情况下获取它们的名称。我怎样才能做到这一点 A类: export class A { property1: string; property2: string; ... property30: string; } 我尝试从这个类实例化一个新对象,并调用object.keys和object.getOwnPropertyNames,但这两个方法返回一个空数组,因为它
export class A {
property1: string;
property2: string;
...
property30: string;
}
我尝试从这个类实例化一个新对象,并调用
object.keys
和object.getOwnPropertyNames
,但这两个方法返回一个空数组,因为它们忽略了未定义的值属性。有没有办法绕过这种行为?还是我打破了JavaScript/TypeScript模式D属性声明的工作方式是,它们只是一个提示,提示编译器该属性可能在运行时存在。在JavaScript中,您不需要声明字段,因此在分配字段之前,该字段不会存在于对象上。如果仅使用null
或undefined
初始化字段,该字段将显示在对象上。这是实现你想要的最简单的方法
另一种方法是在每个领域都使用装饰器。这将更加明确,但不更短,也不一定不容易出错。属性声明的工作方式是,它们只是向编译器提示该属性可能在运行时存在。在JavaScript中,您不需要声明字段,因此在分配字段之前,该字段不会存在于对象上。如果仅使用
null
或undefined
初始化字段,该字段将显示在对象上。这是实现你想要的最简单的方法
另一种方法是在每个领域都使用装饰器。这将更加明确,但不会更短,也不一定不容易出错请确保编译器首先支持类。然后,您必须执行接口或类。如果是一门课,你需要
class A {
title = ''
}
var a = new A();
console.log(a);
将标题声明为字符串,title:string='
。你的写作更多的是为了界面。这是输出
Object {
title: ""
}
是的,我现在更明白你的问题了,没有赋值,它不会设置属性
interface B {
title: String;
}
class A implements B {
title = '';
}
var a = new A();
console.log(a);
如果是这种情况,一个简单的解决方案是为该属性提供一些默认值。或者浏览一个列表,根据它们的类型手动初始化它们
class A {
keys = {
title: 'String'
}
}
首先确保编译器支持类。然后,您必须执行接口或类。如果是一门课,你需要
class A {
title = ''
}
var a = new A();
console.log(a);
将标题声明为字符串,title:string='
。你的写作更多的是为了界面。这是输出
Object {
title: ""
}
是的,我现在更明白你的问题了,没有赋值,它不会设置属性
interface B {
title: String;
}
class A implements B {
title = '';
}
var a = new A();
console.log(a);
如果是这种情况,一个简单的解决方案是为该属性提供一些默认值。或者浏览一个列表,根据它们的类型手动初始化它们
class A {
keys = {
title: 'String'
}
}
可能重复的Nop它不是重复的,因为在提供的链接中,他们为属性提供了一些默认值。可能重复的Nop它不是重复的,因为在提供的链接中,他们为属性提供了一些默认值。没有办法不设置默认值?谢谢e.m.b,很有趣,这真是太有趣了。问题是我有很多类,我和每个开发人员一样懒得为每个类属性分配默认值。请尝试
a.constructor
,例如console.log(a.constructor)
从上面的示例a.constructor返回一个名为a()的函数这需要0个参数,我只有一个等于A的属性名。没有默认值是不行的?谢谢e.m.b,很有趣,这太有趣了。问题是我有很多类,我和每个开发人员一样懒得为每个类属性指定默认值。试试A.constructor
,例如,console.log(a.constructor)
从上面的示例a.constructor返回一个名为a()的函数,该函数接受0个参数,我只有一个等于a的属性名。问题是,我有很多类,我想知道它们的属性,如果不指定默认值,我就无法做到这一点。对吗?@e.m.b在任何一种解决方案中,分配默认值或装饰符,都必须对所有属性进行处理。问题是我有很多类,我想知道它们的属性,如果不分配默认值,我就无法做到这一点。对吗?@e.m.b在任何一种解决方案中,分配默认值或装饰符,您都必须对所有属性执行某些操作