Typescript 有没有一种方法可以获取类中某一类型的所有变量?
假设我有一个Typescript类,比如Typescript 有没有一种方法可以获取类中某一类型的所有变量?,typescript,Typescript,假设我有一个Typescript类,比如 class MyClass { myNum1:number; myNum2:number; myNum3:number; myString:string; myBoolean:boolean; } 是否有任何方法可以获取number类型的所有实例变量?您的代码编译为: var MyClass = (function () { function MyClass() { } retu
class MyClass {
myNum1:number;
myNum2:number;
myNum3:number;
myString:string;
myBoolean:boolean;
}
是否有任何方法可以获取number类型的所有实例变量?您的代码编译为:
var MyClass = (function () {
function MyClass() {
}
return MyClass;
}());
你可以看到里面什么都没有。。。但是,如果初始化属性,将产生如下结果:
资料来源:TS:
class MyClass {
myNum1: number = 0;
myNum2: number = 0;
myNum3: number = 0;
myString: string = "";
myBoolean: boolean = false;
}
结果:
var MyClass = (function () {
function MyClass() {
this.myNum1 = 0;
this.myNum2 = 0;
this.myNum3 = 0;
this.myString = "";
this.myBoolean = false;
}
return MyClass;
}());
然后可以检查实例属性:
var instance = new MyClass();
Object.keys(instance) //["myNum1", "myNum2", "myNum3", "myString", "myBoolean"]
instance["myNum1"] // 0
考虑到这一点,您可以筛选所需的属性:
var numerics = Object.keys(instance).map(k => instance[k]).filter(v => v.constructor === Number)
console.log(numerics) //[0, 0, 0]
您的代码编译为:
var MyClass = (function () {
function MyClass() {
}
return MyClass;
}());
你可以看到里面什么都没有。。。但是,如果初始化属性,将产生如下结果:
资料来源:TS:
class MyClass {
myNum1: number = 0;
myNum2: number = 0;
myNum3: number = 0;
myString: string = "";
myBoolean: boolean = false;
}
结果:
var MyClass = (function () {
function MyClass() {
this.myNum1 = 0;
this.myNum2 = 0;
this.myNum3 = 0;
this.myString = "";
this.myBoolean = false;
}
return MyClass;
}());
然后可以检查实例属性:
var instance = new MyClass();
Object.keys(instance) //["myNum1", "myNum2", "myNum3", "myString", "myBoolean"]
instance["myNum1"] // 0
考虑到这一点,您可以筛选所需的属性:
var numerics = Object.keys(instance).map(k => instance[k]).filter(v => v.constructor === Number)
console.log(numerics) //[0, 0, 0]
酷-我不知道.constructor.name。这是非常有用的。谢谢你的解释。v.constructor.name===Number和v.constructor==Number有何不同?@SantiagoHernández你是说like constructor…:有{}吗?我以为构造函数无论如何都不能返回任何东西不,对不起,我想说的是.constructor.name会在typescript中抛出一个错误,所以你需要做一些像v.constructor.name===Number或v.constructor==Number这样的事情才能让它正常工作-我不知道.constructor.name。这是非常有用的。谢谢你的解释。v.constructor.name===Number和v.constructor==Number有何不同?@SantiagoHernández你是说like constructor…:有{}吗?我认为构造函数无论如何都不能返回任何内容不,对不起,我想说的是。constructor.name将在typescript中抛出一个错误,因此您需要执行类似于v.constructor.name==Number或v.constructor==Number的操作才能使其正常工作