Typescript 类型脚本构造函数质量赋值

Typescript 类型脚本构造函数质量赋值,typescript,Typescript,我正在用TypeScript为数据库实现数据模型,代码看起来非常难看和冗长,有没有更短的版本来声明它 它是针对MongoDB的,所以我希望为原始MongoDB文档和模型类分别提供一个接口。丑陋但有效的版本看起来是这样的 interface PostDocument { id: number text: string } class Post implements PostDocument { id: number text: string constructor(

我正在用TypeScript为数据库实现数据模型,代码看起来非常难看和冗长,有没有更短的版本来声明它

它是针对MongoDB的,所以我希望为原始MongoDB文档和模型类分别提供一个接口。丑陋但有效的版本看起来是这样的

interface PostDocument {
  id:   number
  text: string
}

class Post implements PostDocument {
  id:   number
  text: string

  constructor(doc: PostDocument) {
    this.id = doc.id
    this.text = doc.text
  }
}
理想情况下,最好有下面的代码,但我不知道在TypeScript中是否可能有这样的代码

class Model<D> {
  somehow declare properties from D on Model
  constructor(document: D) { Object.assign(this, document)  }
}

interface PostDocument {
  id:   number
  text: string
}

class Post extends Model<PostDocument> {}
类模型{
以某种方式从模型上的D声明属性
构造函数(文档:D){Object.assign(this,document)}
}
接口PostDocument{
身份证号码
文本:字符串
}
类Post扩展模型{}

实际上,这似乎是可能的

interface ModelConstructor<M, D> { new (document: D): M & D }

abstract class Model<D> {
  constructor(document: D) { Object.assign(this, document) }
}

function buildModel<D extends Object>(): ModelConstructor<Model<D>, D> {
  return Model as any
}

interface PostDocument {
  id:   number
  text: string
}

class Post extends buildModel<PostDocument>() {
}

const document: PostDocument = { id: 5, text: 'something' }
const post = new Post(document)
console.log(post.text)
interface ModelConstructor{new(文档:D):M&D}
抽象类模型{
构造函数(文档:D){Object.assign(this,document)}
}
函数buildModel():ModelConstructor{
返回模型
}
接口PostDocument{
身份证号码
文本:字符串
}
类Post扩展了buildModel(){
}
constdocument:PostDocument={id:5,文本:'something'}
const post=新职位(文档)
console.log(post.text)