动态添加对象属性"直接"在JavaScript / TypeScript

时间:2016-02-17 14:18:09

标签: javascript typescript

在JavaScript / TypeScript中是否可以直接从对象添加属性"到类的this(没有遍历对象属性并以这种方式创建它们)?

这样的事情不起作用(据我所知):

const TEST:any = {
    case1: {
        ing: "ing1",
        ping: "ping1"       
    },
    case2: {
        ing: "ing2",
        ping: "ping2"       
    }
}

class Test {

    constructor() {
        if (true) {
            Object.assign(this, TEST.case1);                        
        } else {
            Object.assign(this, TEST.case2);            
        }
    }
}

所以我可以这样使用它:

let test = new Test();
console.log(test.ing); // outputs "ing1"

1 个答案:

答案 0 :(得分:2)

if(true)让它始终进入if,永远不会进入其他地方。您的代码按预期工作。请注意,您不能将变量声明为特定类型,看起来您正在尝试混合使用ES6和TypeScript。

也许你的意思是以下(http://www.es6fiddle.net/ikqxpqh4/):

const TEST/* : any (Type information is TypeScript not ES6) */ = {
    case1: {
        ing: "ing1",
        ping: "ping1"       
    },
    case2: {
        ing: "ing2",
        ping: "ping2"       
    }
}

class Test {

    constructor(test) {
        if (test) {
            Object.assign(this, TEST.case1);                        
        } else {
            Object.assign(this, TEST.case2);            
        }
    }
}
var t1 = new Test(false);
var t2 = new Test(true);
console.log(JSON.stringify(t1), JSON.stringify(t2));
// {"ing":"ing2","ping":"ping2"} {"ing":"ing1","ping":"ping1"}