javascript - 打字稿:按值或引用导入和导出
问题描述
我正在将一些 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 打印相同的
任何关于为什么这样做的见解将不胜感激
解决方案
您可以使用对象克隆来确保它们指向不同的对象
static ORGANIZATION(): POST_Requirements{
let a = new POST_Requirements(["f1", "f2"], ["t1", "t2"]);
return {...a}
}
这是一个以 Angular 为例的 stackblitz https://stackblitz.com/edit/angular-wxvgus
推荐阅读
- mysql - 如果值不在另一个表中,则在一个表中插入该值
- node.js - Mongoose 中的实用模式设计,用于主页中的文章/主题列表以及每个完整的详细文章/主题
- r - 根据条件组合和复制行
- python - Numpy:为什么我不能将一个矩阵分配给另一个矩阵的索引部分?
- javascript - 为什么函数返回不是函数
- printing - 如何使用 OpenLayers 在一定程度上应用比例?
- javascript - 我无法在 Javascript 中的函数之外访问我的数组元素
- python - 如何根据一个变量包含的内容使其他变量为真?
- javascript - redux 加载资源失败:服务器响应状态为 400 (Bad Request)
- html - Angular 6 的日期选择器