2017-06-26 8 views
0

私はTSを使ってノードエクスプレスAPIを構築しています。私はmodelviewmodelのクラスを区別します。 Postモデルクラスは、複数のビューモデル表現を持つことができます。Typescript:別の同様のタイプにキャスト

しかし、私はモデルからビューモデルクラスにどのようにキャストしますか?新しいビューモデルオブジェクトを作成するメソッドを作成できます。しかし、別のタイプにキャストすることは可能ですか?

Post.ts

export interface IPost { 
    id: number; 
    author: string; 
    heading: string; 
    body: string; 
} 

/** 
* Class to model a blog post 
*/ 
export class Post implements IPost { 

    public id: number; 
    public author: string; 
    public heading: string; 
    public body: string; 

    constructor(id: number, author: string, heading: string, body: string) { 
     this.id = id; 
     this.author = author; 
     this.heading = heading; 
     this.body = body; 
    } 
} 

PostVM.ts

export interface IPostVM { 
    id: number; 
    author: string; 
    text?: string; 
} 

/** 
* Class to model a blog post 
*/ 
export class PostVM implements IPostVM { 

    public id: number; 
    public author: string; 
    public text?: string; 

    constructor(id: number, author: string, body: string) { 
     this.id = id; 
     this.author = author; 
     this.text = body; 
    } 
} 

App.ts

// This is NOT working: 
const post: IPost = this.dao.getPostById(id); 
const postVM: IPostVM = post as PostVM; 

結果:

{ 
    "author": "Ole", 
    "body": "Dette er en test på body tekst.", 
    "heading": "Overskrift 1", 
    "id": 1 
} 

は次のようになります。

{ 
    "id": 1 
    "author": "Ole", 
    "text": "Overskrift 1", 
} 
+0

2種類がある

ベストをあなたが行うことができますが、あなたが言ったように、クラスの関数を記述し、そうです互換性がありません。あなたは 'Post'から' PostVM'へのキャストで何をすると思いますか? –

+0

タイプアサーションは、実行時の動作に決して影響しません。また、「見出し」が「テキスト」になるべきことをコンピュータがどのように知っていると思いますか? –

+0

PostVMを作成するファクトリメソッドを作成する方法はありますか? – olefrank

答えて

2

あなたはちょうどので、それを「キャスト」することはできません、コメントはあなたがクラスを変換する方法を知る方法はありません言ったようにあなた自身で書かない限り。それでは

export class Post implements IPost { 
    <...> 

    toPostVM() { 
     return new PostVM(this.id, this.author, this.body); 
    } 
} 

をごApp.tsにあなたが行うことができます:

const postVM: IPostVM = post.toPostVM(); 
関連する問題