Open2

二つのクラスの相互のMapperをどう書くべき?

Hiromichi ShiozukaHiromichi Shiozuka

二つのクラスがあって

class UserDomain {
    id: number
    name: string
}

class UserEntity {
    id: number
    firstName: string
    lastName: string
}

こいつらを(できれば)メソッドで相互変換したい

const userDomain = userEntity.toDomain()
const userEntity = userDomain.toEntity()

でもお互いの定義の中にお互いがないといけなくて無限ループする

export interface UserEntity { // 拡張メソッド
    toDomain(): UserDomain;
}
UserEntity.prototype.toDomain = (): UserDomain => {
    return {
        id = this.id,
        name = this.firstName + this.lastName,
        // Property 'toEntity' is missing in type ~~~' but required in type 'UserDomain'.
    }
}

メソッドで書くのを諦めるしかない?

import { toDomain } from 'UserEntity'

const userDomain = toDomain(userEntity)
Hiromichi ShiozukaHiromichi Shiozuka

ちゃんとコンストラクタを書いて、

class UserDomain {
    id: number
    name: string
    constructor(input: UserDomainInitializeProps) {
        Object.assign(this, input)
    }
}
type UserDomainInitializeProps = {
    id: number
    name: string
}

newしてあげればいいというのはわかった

UserEntity.prototype.toDomain = (): UserDomain => {
    new UserDomain({
        id = this.id,
        name = this.firstName + this.lastName,
        // Property 'toEntity' is missing in type ~~~' but required in type 'UserDomain'.
    })
}