【发布时间】:2020-04-11 22:02:47
【问题描述】:
我正在将一些 Javascript 代码转换为 Typescript,但我陷入了基本的导入和导出:
所需的功能: 我希望能够在其他几个文件中导入“POST_Requirements”。每个调用 POST_Requirements.ORGANIZATION() 的文件都会收到一个新的实例 POST_Requirements 存储一个所需的变量。对此实例的任何编辑都不会影响文件内的其他实例或任何外部文件。
实际功能: 任何调用 POST_Requirements.ORGANIZATION() 的文件都会收到一个新实例。但是,如果文件 X 编辑其实例,则文件 Y 中的实例会经历相同的编辑。非常困惑,因为这可以通过使用“new”来防止
导出类: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 打印相同的内容
任何关于为什么这样做的见解将不胜感激
【问题讨论】:
-
实例是独立的,但它们共享(通过引用)您传递给构造函数的相同数组,因此当您改变这些数组时(例如通过调用
reverse)所有这些数组都会更改.您可以在构造函数中或在将其传递给构造函数之前复制数组。 -
是的,就是这样!这让我被困了一个多小时,我爱你。
标签: javascript node.js typescript express export