首页 > 解决方案 > 打字稿:按值或引用导入和导出

问题描述

我正在将一些 Javascript 代码转换为 Typescript,但我陷入了基本的导入和导出:

所需功能:我希望能够在其他几个文件中导入“POST_Requirements”。每个调用 POST_Requirements.ORGANIZATION() 的文件都会收到一个新的实例 POST_Requirements 存储一个所需的变量。对此实例的任何编辑都不会影响文件内的其他实例或任何外部文件。

实际功能:任何调用 POST_Requirements.ORGANIZATION() 的文件都会收到一个新实例。但是,如果文件 X 编辑其实例,则文件 Y 中的实例会经历相同的编辑。非常困惑,因为这可以通过使用“新”来防止

导出类:post.requirements.ts

export class POST_Requirements {
  readonly text_fieldnames: Array<string>;
  constructor(
    file_fieldnames: Array<string>,
    text_fieldnames: Array<string>,
    max_file_size: number = 25 * MEGABYTE,
    max_fieldname_size: number = 200,
    max_field_size: number = KILOBYTE
  ) {
    this.file_fieldnames = file_fieldnames;
    this.text_fieldnames = text_fieldnames;
    this.max_file_size = max_file_size;
    this.max_fieldname_size = max_fieldname_size;
    this.max_field_size = max_field_size;
  }

  static ORGANIZATION(): POST_Requirements {
    return new POST_Requirements(
      ORGANIZATION_FILE_FIELDNAMES,
      ORGANIZATION_TEXT_FIELDNAMES
    );
  }
}

单独的文件:

let a: POST_Requirements = POST_Requirements.ORGANIZATION();
let b: POST_Requirements = POST_Requirements.ORGANIZATION();

let a_sub: Array<string> = a.text_fieldnames;
let b_sub: Array<string> = b.text_fieldnames;

console.log(a_sub)
console.log(b_sub)
a_sub.reverse();
console.log(a_sub)
console.log(b_sub)

a_sub 和 b_sub 总是打印相同的值。在一个单独的文件中, c_sub 打印相同的

任何关于为什么这样做的见解将不胜感激

标签: javascriptnode.jstypescriptexpressexport

解决方案


您可以使用对象克隆来确保它们指向不同的对象

static ORGANIZATION(): POST_Requirements{
  let a = new POST_Requirements(["f1", "f2"], ["t1", "t2"]);
    return {...a}
}

这是一个以 Angular 为例的 stackblitz https://stackblitz.com/edit/angular-wxvgus


推荐阅读