繁体   English   中英

在打字稿和javascript中为基类创建命名参数

[英]Creating named parameter to base class in typescript and javascript

我创建了一个基本模型类,其中包含传入数据的模型,出于某些外部原因,我将在类内部对数据进行建模。 尽管我遇到了将传入数据定义到此模型类中的问题。 这是我的课

export class EntityBasic {
  constructor(
    public id: string,
    public title: string,
    public urn?: string,
    public risk_level?: string,
    public be_aware?: string,
    public body?: string,
    public published_at?: string,
    public created_at?: string,
    public updated_at?: string,
    public description?: string,
    public notes?: string,
  ) {}}
}

我如何在另一个页面中定义其中的内容:

public getEntity(setEntity) {
    return new EntityBasic(
      setEntity.id,
      setEntity.title,
      setEntity?.urn,
      setEntity?.risk_level,
      setEntity?.be_aware,
      setEntity?.body,
      setEntity?.published_at,
      setEntity?.created_at,
      setEntity?.updated_at,
      setEntity?.report?.summary || '',
      setEntity?.report?.metadata?.source_notes,
      setEntity?.report?.metadata?.notes,
    );
  }

但是像这样定义数据给我带来了问题,因为有时不会有骨灰盒或 risk_level 例如,数据会在类中混乱。
我想要一种这样定义的方法(这不起作用):

public getEntity(setEntity) {
    return new EntityBasic(
      id = setEntity.id,
      title = setEntity.title,
      urn = setEntity?.urn,
      risk_level = setEntity?.risk_level,
    )
}

我相信将所有参数包装到一个对象中是最好的解决方案。

  1. 将它们包装为接口
interface EntityBasicParameters {
    id: string;
    title: string;
    urn?: string;
    risk_level?: string;
    be_aware?: string;
    body?: string;
    published_at?: string;
    created_at?: string;
    updated_at?: string;
    description?: string;
    notes?: string;
}
  1. 仅接受此对象作为构造函数参数
export class EntityBasic {
  constructor(params: EntityBasicParameters) {}}
}
  1. 现在您只能传递现有数据
public getEntity(setEntity) {
    return new EntityBasic({
      id: setEntity.id,
      title: setEntity.title,
      urn: setEntity?.urn,
      risk_level: setEntity?.risk_level,
    })
}

要不就

public getEntity(setEntity) {
    return new EntityBasic(setEntity)
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM