【发布时间】:2021-11-12 18:10:57
【问题描述】:
在导出/导入可变值时,我试图了解 import 和 require 之间的区别。
想象一个文件a.ts:
export let a = 1;
export function f() {
a = 2;
}
然后是一个主文件的三个版本,index1.ts:
import { a, f } from "./a";
console.log(a); // 1
f();
console.log(a); // 2
index2.ts:
const { a, f } = require("./a");
console.log(a); // 1
f();
console.log(a); // 1
index3.ts:
const _ = require("./a");
console.log(_.a); // 1
_.f();
console.log(_.a); // 2
- 我希望 index1.ts 产生与 index2.ts 相同的输出,但事实并非如此。
importeda总是从 a.ts 引用实际的a变量。有什么保证会一直如此?规范是否强制执行此行为? -
index3.ts 有效,因为
require返回的对象的属性是getters。同样,这是否保证始终正确?例如,我们可以依赖它来设计一个库吗?
【问题讨论】:
-
import创建一个别名,而不是一个新变量。const确实创建了一个变量来获取值的副本。