2016-05-18 9 views
6

JSライブラリを使用しています。具体的には、select2は、渡しているオブジェクトが普通のオブジェクトではない場合とは異なる動作をします。これはすべてjQueryのisPlainObject関数を使ってチェックされます。TypeScriptオブジェクトをプレーンオブジェクトに変換するにはどうすればよいですか?

TypeScriptにはキャストがありますか?自分で作成することなくこれを達成することはできませんか?

class Opt { 
    constructor(public id, public text) { 

    } 

    toPlainObj(): Object { 
     return { 
      id: this.id, 
      text: this.text 
     } 
    } 
} 

let opts = [ 
    new Opt(0, 'foo'), 
    new Opt(1, 'bar') 
]; 

console.clear() 

console.log('both should be false') 
$.map(opts, opt => { 
    console.log($.isPlainObject(opt)) 
}) 

console.log('both should be true') 
$.map(opts, opt => { 
    console.log($.isPlainObject(opt.toPlainObj())) 
}) 
+0

をここにコードを投稿してください – messerbill

+0

@messerbill私はSOコードスニペットがTypeScriptをサポートしているとは思わない。少なくとも、私はそれを働かせることはできません。 –

+0

ここに入力してください - コードスニペット機能を使用する必要はありません – messerbill

答えて

8

あなたはObject.assign()を使用することができます。

class Point { 
    private x: number; 
    private y: number; 

    constructor(x: number, y: number) { 
     this.x = x; 
     this.y = y; 
    } 

    getX(): number { 
     return this.x; 
    } 

    getY(): number { 
     return this.y; 
    } 
} 

let p1 = new Point(4, 5); 
let p2 = Object.assign({}, p1); 

p1は、クラスのインスタンスであり、かつp2はちょうど{ x: 4, y: 5 }です。

そしてtoPlainObj方法:

class Point { 
    private x: number; 
    private y: number; 

    constructor(x: number, y: number) { 
     this.x = x; 
     this.y = y; 
    } 

    getX(): number { 
     return this.x; 
    } 

    getY(): number { 
     return this.y; 
    } 

    toPlainObj(): { x: number, y: number } { 
     return Object.assign({}, this); 
    } 
} 

これは、あなたがそれ以上のクラスで必要なものであるなら、あなたはこの方法であり、基本クラス持つことができます。

class BaseClass<T> { 
    toPlainObj(): T { 
     return Object.assign({}, this); 
    } 
} 

class Point extends BaseClass<{ x: number, y: number }> { 
    private x: number; 
    private y: number; 

    constructor(x: number, y: number) { 
     super(); 

     this.x = x; 
     this.y = y; 
    } 

    getX(): number { 
     return this.x; 
    } 

    getY(): number { 
     return this.y; 
    } 
} 
関連する問題