Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typescript/9.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
Typescript 有没有一种方法可以获取类中某一类型的所有变量?_Typescript - Fatal编程技术网

Typescript 有没有一种方法可以获取类中某一类型的所有变量?

Typescript 有没有一种方法可以获取类中某一类型的所有变量?,typescript,Typescript,假设我有一个Typescript类,比如 class MyClass { myNum1:number; myNum2:number; myNum3:number; myString:string; myBoolean:boolean; } 是否有任何方法可以获取number类型的所有实例变量?您的代码编译为: var MyClass = (function () { function MyClass() { } retu

假设我有一个Typescript类,比如

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的操作才能使其正常工作